Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Text-CSV_XS for 
openSUSE:Factory checked in at 2024-06-24 20:50:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Text-CSV_XS (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Text-CSV_XS.new.18349 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Text-CSV_XS"

Mon Jun 24 20:50:38 2024 rev:55 rq:1182964 version:1.550.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Text-CSV_XS/perl-Text-CSV_XS.changes        
2024-05-16 17:13:27.608192391 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Text-CSV_XS.new.18349/perl-Text-CSV_XS.changes 
    2024-06-24 20:51:25.832223558 +0200
@@ -1,0 +2,10 @@
+Sun Jun 23 16:49:35 UTC 2024 - Tina Müller <tina.muel...@suse.com>
+
+- updated to 1.550.0 (1.55)
+   see /usr/share/doc/packages/perl-Text-CSV_XS/ChangeLog
+
+  1.55 - 2024-06-18, H.Merijn Brand
+      * More fixes for strict under bind_columns (issue 54)
+      * Strict won't hide previous error (issue 56)
+
+-------------------------------------------------------------------

Old:
----
  Text-CSV_XS-1.54.tgz

New:
----
  Text-CSV_XS-1.55.tgz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Text-CSV_XS.spec ++++++
--- /var/tmp/diff_new_pack.sA2I2i/_old  2024-06-24 20:51:26.360242859 +0200
+++ /var/tmp/diff_new_pack.sA2I2i/_new  2024-06-24 20:51:26.364243005 +0200
@@ -18,10 +18,10 @@
 
 %define cpan_name Text-CSV_XS
 Name:           perl-Text-CSV_XS
-Version:        1.540.0
+Version:        1.550.0
 Release:        0
-# 1.54 -> normalize -> 1.540.0
-%define cpan_version 1.54
+# 1.55 -> normalize -> 1.550.0
+%define cpan_version 1.55
 License:        Artistic-1.0 OR GPL-1.0-or-later
 Summary:        Comma-Separated Values manipulation routines
 URL:            https://metacpan.org/release/%{cpan_name}

++++++ Text-CSV_XS-1.54.tgz -> Text-CSV_XS-1.55.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/CSV_XS.pm 
new/Text-CSV_XS-1.55/CSV_XS.pm
--- old/Text-CSV_XS-1.54/CSV_XS.pm      2024-04-18 09:41:00.000000000 +0200
+++ new/Text-CSV_XS-1.55/CSV_XS.pm      2024-06-18 08:10:43.000000000 +0200
@@ -23,7 +23,7 @@
 use Carp;
 
 use vars qw( $VERSION @ISA @EXPORT_OK %EXPORT_TAGS );
-$VERSION = "1.54";
+$VERSION = "1.55";
 @ISA     = qw( Exporter );
 XSLoader::load ("Text::CSV_XS", $VERSION);
 
@@ -3133,7 +3133,8 @@
 to store in the fields fetched by L</getline>.  When you do not pass enough
 references to store the fetched fields in, L</getline> will fail with error
 C<3006>.  If you pass more than there are fields to return,  the content of
-the remaining references is left untouched.
+the remaining references is left untouched.  Under C<strict> the two should
+match, otherwise L</getline> will fail with error C<2014>.
 
  $csv->bind_columns (\$code, \$name, \$price, \$description);
  while ($csv->getline ($fh)) {
@@ -3406,6 +3407,18 @@
 When called as a class method or a  direct function call,  the  diagnostics
 are that of the last L</new> call.
 
+=head3 _cache_diag
+
+Note: This is an internal function only,  and output cannot be relied upon.
+Use at own risk.
+
+If debugging beyond what L</error_diag> is able to show, the internal cache
+can be shown with this function.
+
+ # Something failed ..
+ $csv->error_diag;
+ $csv->_cache_diag ();
+
 =head2 record_number
 X<record_number>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/CSV_XS.xs 
new/Text-CSV_XS-1.55/CSV_XS.xs
--- old/Text-CSV_XS-1.54/CSV_XS.xs      2024-04-11 15:14:07.000000000 +0200
+++ new/Text-CSV_XS-1.55/CSV_XS.xs      2024-06-07 11:09:48.000000000 +0200
@@ -1230,6 +1230,22 @@
     return TRUE;
     } /* Combine */
 
+#define ErrorDiag(csv) cx_ErrorDiag (aTHX_ csv)
+static void cx_ErrorDiag (pTHX_ csv_t *csv) {
+    SV **svp;
+
+    if ((svp = hv_fetchs (csv->self, "_ERROR_DIAG", FALSE)) && *svp) {
+       if (SvIOK (*svp)) (void)fprintf (stderr, "ERR: %d\n", SvIV (*svp));
+       if (SvPOK (*svp)) (void)fprintf (stderr, "ERR: %s\n", SvPV_nolen 
(*svp));
+       }
+    if ((svp = hv_fetchs (csv->self, "_ERROR_POS", FALSE)) && *svp) {
+       if (SvIOK (*svp)) (void)fprintf (stderr, "POS: %d\n", SvIV (*svp));
+       }
+    if ((svp = hv_fetchs (csv->self, "_ERROR_FLD", FALSE)) && *svp) {
+       if (SvIOK (*svp)) (void)fprintf (stderr, "FLD: %d\n", SvIV (*svp));
+       }
+    } /* ErrorDiag */
+
 #define ParseError(csv,xse,pos)        cx_ParseError (aTHX_ csv, xse, pos)
 static void cx_ParseError (pTHX_ csv_t *csv, int xse, STRLEN pos) {
     (void)hv_store (csv->self, "_ERROR_POS", 10, newSViv (pos), 0);
@@ -2186,7 +2202,7 @@
     (void)hv_store (hv, "_EOF",   4, &PL_sv_no,             0);
 
     if (csv.strict) {
-       STRLEN nf = av_len (av);
+       STRLEN nf = csv.is_bound ? csv.fld_idx : av_len (av);
 #if MAINT_DEBUG > 6
        (void)fprintf (stderr, "# %04d Strict nf = %2d, n = %2d, idx = %2d, 
recno = %2d, res = %d\n",
            __LINE__, nf, csv.strict_n, csv.fld_idx, csv.recno, result);
@@ -2194,8 +2210,12 @@
 
        if (nf && !csv.strict_n) csv.strict_n = (short)nf;
        if (csv.strict_n > 0 && nf != csv.strict_n) {
-           unless (csv.useIO & useIO_EOF)
-               ParseError (&csv, 2014, csv.used);
+           unless (csv.useIO & useIO_EOF) {
+#if MAINT_DEBUG > 6
+               ErrorDiag (&csv);
+#endif
+               unless (last_error) ParseError (&csv, 2014, csv.used);
+               }
            if (last_error) /* an error callback can reset and accept */
                result = FALSE;
            }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/ChangeLog 
new/Text-CSV_XS-1.55/ChangeLog
--- old/Text-CSV_XS-1.54/ChangeLog      2024-04-18 09:42:29.000000000 +0200
+++ new/Text-CSV_XS-1.55/ChangeLog      2024-06-18 08:06:19.000000000 +0200
@@ -1,3 +1,7 @@
+1.55   - 2024-06-18, H.Merijn Brand
+    * More fixes for strict under bind_columns (issue 54)
+    * Strict won't hide previous error (issue 56)
+
 1.54   - 2024-04-18, H.Merijn Brand
     * Fix doc (Jean Forget, RT#150757)
     * It's 2024
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/MANIFEST 
new/Text-CSV_XS-1.55/MANIFEST
--- old/Text-CSV_XS-1.54/MANIFEST       2024-04-18 14:09:10.000000000 +0200
+++ new/Text-CSV_XS-1.55/MANIFEST       2024-06-18 08:11:44.000000000 +0200
@@ -29,6 +29,7 @@
 t/67_emptrow.t         Empty row behavior
 t/68_header.t          Test header option combinations
 t/70_rt.t              Tests based on RT reports
+t/71_strict.t          Test strict rrelated issues
 t/75_hashref.t         getline_hr related tests
 t/76_magic.t           array_ref from magic
 t/77_getall.t          Get all rows at once
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/META.json 
new/Text-CSV_XS-1.55/META.json
--- old/Text-CSV_XS-1.54/META.json      2024-04-18 14:09:14.000000000 +0200
+++ new/Text-CSV_XS-1.55/META.json      2024-06-18 08:11:44.000000000 +0200
@@ -1,27 +1,23 @@
 {
    "name" : "Text-CSV_XS",
-   "author" : [
-      "H.Merijn Brand <hmbr...@cpan.org>"
-   ],
    "abstract" : "Comma-Separated Values manipulation routines",
+   "generated_by" : "Author",
    "dynamic_config" : 1,
-   "resources" : {
-      "x_IRC" : "irc://irc.perl.org/#csv",
-      "repository" : {
-         "web" : "https://github.com/Tux/Text-CSV_XS";,
-         "type" : "git",
-         "url" : "https://github.com/Tux/Text-CSV_XS";
-      },
-      "bugtracker" : {
-         "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Text-CSV_XS";
-      },
-      "homepage" : "https://metacpan.org/pod/Text::CSV_XS";,
-      "license" : [
-         "http://dev.perl.org/licenses/";
-      ]
-   },
-   "version" : "1.54",
+   "license" : [
+      "perl_5"
+   ],
+   "release_status" : "stable",
    "prereqs" : {
+      "runtime" : {
+         "recommends" : {
+            "Encode" : "3.21"
+         },
+         "requires" : {
+            "XSLoader" : "0",
+            "perl" : "5.006001",
+            "IO::Handle" : "0"
+         }
+      },
       "test" : {
          "requires" : {
             "Tie::Scalar" : "0",
@@ -36,35 +32,39 @@
             "ExtUtils::MakeMaker" : "0"
          }
       },
-      "runtime" : {
-         "requires" : {
-            "perl" : "5.006001",
-            "XSLoader" : "0",
-            "IO::Handle" : "0"
-         },
-         "recommends" : {
-            "Encode" : "3.21"
-         }
-      },
       "build" : {
          "requires" : {
             "Config" : "0"
          }
       }
    },
-   "meta-spec" : {
-      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec";,
-      "version" : 2
+   "resources" : {
+      "license" : [
+         "http://dev.perl.org/licenses/";
+      ],
+      "homepage" : "https://metacpan.org/pod/Text::CSV_XS";,
+      "bugtracker" : {
+         "web" : "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Text-CSV_XS";
+      },
+      "x_IRC" : "irc://irc.perl.org/#csv",
+      "repository" : {
+         "url" : "https://github.com/Tux/Text-CSV_XS";,
+         "web" : "https://github.com/Tux/Text-CSV_XS";,
+         "type" : "git"
+      }
    },
-   "generated_by" : "Author",
    "provides" : {
       "Text::CSV_XS" : {
-         "version" : "1.54",
-         "file" : "CSV_XS.pm"
+         "file" : "CSV_XS.pm",
+         "version" : "1.55"
       }
    },
-   "release_status" : "stable",
-   "license" : [
-      "perl_5"
+   "meta-spec" : {
+      "version" : 2,
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec";
+   },
+   "version" : "1.55",
+   "author" : [
+      "H.Merijn Brand <hmbr...@cpan.org>"
    ]
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/META.yml 
new/Text-CSV_XS-1.55/META.yml
--- old/Text-CSV_XS-1.54/META.yml       2024-04-18 14:09:14.000000000 +0200
+++ new/Text-CSV_XS-1.55/META.yml       2024-06-18 08:11:44.000000000 +0200
@@ -16,7 +16,7 @@
 provides: 
   Text::CSV_XS: 
     file: CSV_XS.pm
-    version: '1.54'
+    version: '1.55'
 recommends: 
   Encode: '3.21'
 requires: 
@@ -31,4 +31,4 @@
   homepage: https://metacpan.org/pod/Text::CSV_XS
   license: http://dev.perl.org/licenses/
   repository: https://github.com/Tux/Text-CSV_XS
-version: '1.54'
+version: '1.55'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/ppport.h 
new/Text-CSV_XS-1.55/ppport.h
--- old/Text-CSV_XS-1.54/ppport.h       2024-01-04 10:29:29.000000000 +0100
+++ new/Text-CSV_XS-1.55/ppport.h       2024-06-18 08:07:48.000000000 +0200
@@ -4,9 +4,9 @@
 /*
 ----------------------------------------------------------------------
 
-    ppport.h -- Perl/Pollution/Portability Version 3.71
+    ppport.h -- Perl/Pollution/Portability Version 3.72
 
-    Automatically created by Devel::PPPort running under perl 5.038002.
+    Automatically created by Devel::PPPort running under perl 5.040000.
 
     Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
     includes in parts/inc/ instead.
@@ -21,7 +21,7 @@
 
 =head1 NAME
 
-ppport.h - Perl/Pollution/Portability version 3.71
+ppport.h - Perl/Pollution/Portability version 3.72
 
 =head1 SYNOPSIS
 
@@ -588,7 +588,7 @@
 # Disable broken TRIE-optimization
 BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if "$]" >= "5.009004" && "$]" <= 
"5.009005"}
 
-my $VERSION = 3.71;
+my $VERSION = 3.72;
 
 my %opt = (
   quiet     => 0,
@@ -7087,6 +7087,7 @@
 PerlSock_socketpair|5.005000||Viu
 PerlSock_socketpair_cloexec|5.027008||Viu
 Perl_sqrt|5.006000|5.006000|n
+PERL_STACK_OFFSET_DEFINED|||piu
 PERL_STACK_OVERFLOW_CHECK|5.006000||Viu
 PERL_STATIC_FORCE_INLINE|5.031011||Viu
 PERL_STATIC_FORCE_INLINE_NO_RET|5.031011||Viu
@@ -8895,6 +8896,8 @@
 SSPUSHUV|5.013001||Viu
 ST|5.003007|5.003007|
 stack_grow|5.003007||cVu
+Stack_off_t_MAX|||piu
+Stack_off_t|||piu
 STANDARD_C|5.003007||Viu
 STAR|5.003007||Viu
 STAR_t8|5.035004||Viu
@@ -9020,7 +9023,7 @@
 sv_2num|5.010000||xVi
 sv_2nv|5.013001||Viu
 sv_2nv_flags|5.013001|5.013001|
-sv_2pv|5.005000||cVu
+sv_2pv|5.005000||pcVu
 sv_2pvbyte|5.006000|5.003007|p
 sv_2pvbyte_flags|5.031004|5.031004|u
 sv_2pvbyte_nolen|5.009003||pcV
@@ -11567,7 +11570,7 @@
 #define DPPP_CAT2(x,y) CAT2(x,y)
 #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
 
-#define D_PPP_RELEASE_DATE 1647561600 /* 2022-03-18 */
+#define D_PPP_RELEASE_DATE 1693785600 /* 2023-09-04 */
 
 #if ! defined(PERL_REVISION) && ! defined(PERL_VERSION_MAJOR)
 #  if   !   defined(__PATCHLEVEL_H_INCLUDED__)                                 
 \
@@ -11679,8 +11682,8 @@
  * is in ASCII and EBCDIC respectively */
 #ifndef PERL_VERSION_EQ
 #  define PERL_VERSION_EQ(j,n,p)         \
-              (((p) == '*') ? (   (j) == D_PPP_VERSION_MAJOR                \
-                               && (n) == D_PPP_VERSION_MINOR)               \
+              (((p) == '*') ? (   (j) == D_PPP_MAJOR                        \
+                               && (n) == D_PPP_MINOR)                       \
                             : (PERL_BCDVERSION == D_PPP_JNP_TO_BCD(j,n,p)))
 #endif
 
@@ -11689,7 +11692,7 @@
 #endif
 #ifndef PERL_VERSION_LT
 #  define PERL_VERSION_LT(j,n,p)         /* p=='*' means _LT(j,n,0) */     \
-    (PERL_BCDVERSION < D_PPP_JNP_TO_BCD(                    (j),            \
+    (PERL_BCDVERSION < D_PPP_JNP_TO_BCD(                     (j),           \
                                                              (n),           \
                                          (((p) == '*') ? 0 : (p))))
 #endif
@@ -11698,10 +11701,10 @@
 #  define PERL_VERSION_GE(j,n,p)         (! PERL_VERSION_LT(j,n,p))
 #endif
 #ifndef PERL_VERSION_LE
-#  define PERL_VERSION_LE(j,n,p)         /* p=='*' means _LT(j,n+1,0) */   \
-    (PERL_BCDVERSION < D_PPP_JNP_TO_BCD(                          (j),      \
-                                         (((p) == '*') ? ((n)+1) : (n)),    \
-                                         (((p) == '*') ?   0     : (p))))
+#  define PERL_VERSION_LE(j,n,p)         /* p=='*' means _LE(j,n,999) */   \
+    (PERL_BCDVERSION <= D_PPP_JNP_TO_BCD(                      (j),         \
+                                                               (n),         \
+                                         (((p) == '*') ? 999 : (p))))
 #endif
 
 #ifndef PERL_VERSION_GT
@@ -12770,6 +12773,12 @@
 #    define PTR2ul(p)     INT2PTR(unsigned long,p)
 #  endif
 #endif
+
+#ifndef PERL_STACK_OFFSET_DEFINED
+  typedef I32 Stack_off_t;
+#  define Stack_off_t_MAX I32_MAX
+#  define PERL_STACK_OFFSET_DEFINED
+#endif
 #ifndef PTR2nat
 #  define PTR2nat(p)                     (PTRV)(p)
 #endif
@@ -12790,17 +12799,38 @@
 #  define PTR2NV(p)                      NUM2PTR(NV,p)
 #endif
 
+#ifdef __cplusplus
 #undef START_EXTERN_C
+#ifndef START_EXTERN_C
+#  define START_EXTERN_C                 extern "C" {
+#endif
+
 #undef END_EXTERN_C
+#ifndef END_EXTERN_C
+#  define END_EXTERN_C                   }
+#endif
+
 #undef EXTERN_C
-#ifdef __cplusplus
-#  define START_EXTERN_C extern "C" {
-#  define END_EXTERN_C }
-#  define EXTERN_C extern "C"
+#ifndef EXTERN_C
+#  define EXTERN_C                       extern "C"
+#endif
+
 #else
+#undef START_EXTERN_C
+#ifndef START_EXTERN_C
 #  define START_EXTERN_C
+#endif
+
+#undef END_EXTERN_C
+#ifndef END_EXTERN_C
 #  define END_EXTERN_C
-#  define EXTERN_C extern
+#endif
+
+#undef EXTERN_C
+#ifndef EXTERN_C
+#  define EXTERN_C                       extern
+#endif
+
 #endif
 
 #if (PERL_BCDVERSION < 0x5004000) || defined(PERL_GCC_PEDANTIC)
@@ -12820,14 +12850,28 @@
 #  endif
 #endif
 
+#if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && 
!defined(__GNUC__)
 #undef STMT_START
+#ifndef STMT_START
+#  define STMT_START                     if (1)
+#endif
+
 #undef STMT_END
-#if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && 
!defined(__GNUC__)
-#    define STMT_START  if (1)
-#    define STMT_END    else (void)0
+#ifndef STMT_END
+#  define STMT_END                       else (void)0
+#endif
+
 #else
-#    define STMT_START  do
-#    define STMT_END    while (0)
+#undef STMT_START
+#ifndef STMT_START
+#  define STMT_START                     do
+#endif
+
+#undef STMT_END
+#ifndef STMT_END
+#  define STMT_END                       while (0)
+#endif
+
 #endif
 #ifndef boolSV
 #  define boolSV(b)                      ((b) ? &PL_sv_yes : &PL_sv_no)
@@ -12919,13 +12963,16 @@
 #endif
 
 #if (PERL_BCDVERSION < 0x5005000)
-#  undef XSRETURN
-#  define XSRETURN(off)                                   \
+#undef XSRETURN
+#ifndef XSRETURN
+#  define XSRETURN(off)                  \
       STMT_START {                                        \
           PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
           return;                                         \
       } STMT_END
 #endif
+
+#endif
 #ifndef XSPROTO
 #  define XSPROTO(name)                  void name(pTHX_ CV* cv)
 #endif
@@ -13732,7 +13779,8 @@
 #  define isPRINT_utf8_safe(s,e)         D_PPP_IS_GENERIC_UTF8_SAFE(s, e, 
PRINT)
 #endif
 
-#  undef isPSXSPC_utf8_safe   /* Use the modern definition */
+/* Use the modern definition */
+#undef isPSXSPC_utf8_safe
 #ifndef isPSXSPC_utf8_safe
 #  define isPSXSPC_utf8_safe(s,e)        isSPACE_utf8_safe(s,e)
 #endif
@@ -13856,7 +13904,8 @@
 #  define isPRINT_LC_utf8_safe(s,e)      D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, 
PRINT)
 #endif
 
-#  undef isPSXSPC_LC_utf8_safe   /* Use the modern definition */
+/* Use the modern definition */
+#undef isPSXSPC_LC_utf8_safe
 #ifndef isPSXSPC_LC_utf8_safe
 #  define isPSXSPC_LC_utf8_safe(s,e)     isSPACE_LC_utf8_safe(s,e)
 #endif
@@ -14399,13 +14448,39 @@
 #  define SV_COW_SHARED_HASH_KEYS        0
 #endif
 
+#if (PERL_BCDVERSION < 0x5007002)
+#
+/* Fix sv_2pv for Perl < 5.7.2 - view 
https://github.com/Dual-Life/Devel-PPPort/issues/231 */
+
+# ifdef sv_2pv
+#  undef sv_2pv
+# endif
+
+# if defined(PERL_USE_GCC_BRACE_GROUPS)
+#ifndef sv_2pv
+#  define sv_2pv(sv, lp)                 ({ SV *_sv_2pv = (sv); STRLEN 
sv_2pv_dummy_; STRLEN *_lp_2pv = (lp); _lp_2pv = _lp_2pv ? : &sv_2pv_dummy_; 
SvPOKp(_sv_2pv) ? ((*(_lp_2pv) = SvCUR(_sv_2pv)), SvPVX(_sv_2pv)) : 
Perl_sv_2pv(aTHX_ _sv_2pv, (_lp_2pv)); })
+#endif
+
+# else
+#ifndef sv_2pv
+#  define sv_2pv(sv, lp)                 (SvPOKp(sv) ? ((*((lp) ? (lp) : 
&PL_na) = SvCUR(sv)), SvPVX(sv)) : Perl_sv_2pv(aTHX_ (sv), (lp)))
+#endif
+
+# endif
+
+#endif
+
+#if (PERL_BCDVERSION < 0x5007002)
+
+/* Define sv_2pv_flags for Perl < 5.7.2 which does not have it at all */
+
 #if defined(PERL_USE_GCC_BRACE_GROUPS)
 #ifndef sv_2pv_flags
-#  define sv_2pv_flags(sv, lp, flags)    ({ SV *_sv = (sv); const I32 _flags = 
(flags); STRLEN *_lp = lp; _lp = _lp ? : &PL_na; (!(_flags & SV_GMAGIC) && 
SvGMAGICAL(_sv)) ? ({ char *_pv; SvGMAGICAL_off(_sv); _pv = sv_2pv(_sv, _lp); 
SvGMAGICAL_on(_sv); _pv; }) : sv_2pv(_sv, _lp); })
+#  define sv_2pv_flags(sv, lp, flags)    ({ SV *_sv = (sv); STRLEN 
sv_2pv_dummy_; const I32 _flags = (flags); STRLEN *_lp = lp; _lp = _lp ? : 
&sv_2pv_dummy_; (!(_flags & SV_GMAGIC) && SvGMAGICAL(_sv)) ? ({ char *_pv; 
SvGMAGICAL_off(_sv); _pv = sv_2pv(_sv, _lp); SvGMAGICAL_on(_sv); _pv; }) : 
sv_2pv(_sv, _lp); })
 #endif
 
 #ifndef sv_pvn_force_flags
-#  define sv_pvn_force_flags(sv, lp, flags) ({ SV *_sv = (sv); const I32 
_flags = (flags); STRLEN *_lp = lp; _lp = _lp ? : &PL_na; (!(_flags & 
SV_GMAGIC) && SvGMAGICAL(_sv)) ? ({ char *_pv; SvGMAGICAL_off(_sv); _pv = 
sv_pvn_force(_sv, _lp); SvGMAGICAL_on(_sv); _pv; }) : sv_pvn_force(_sv, _lp); })
+#  define sv_pvn_force_flags(sv, lp, flags) ({ SV *_sv = (sv); STRLEN 
sv_2pv_dummy_; const I32 _flags = (flags); STRLEN *_lp = lp; _lp = _lp ? : 
&sv_2pv_dummy_; (!(_flags & SV_GMAGIC) && SvGMAGICAL(_sv)) ? ({ char *_pv; 
SvGMAGICAL_off(_sv); _pv = sv_pvn_force(_sv, _lp); SvGMAGICAL_on(_sv); _pv; }) 
: sv_pvn_force(_sv, _lp); })
 #endif
 
 #else
@@ -14419,6 +14494,28 @@
 
 #endif
 
+#elif (PERL_BCDVERSION < 0x5017002)
+
+/* Fix sv_2pv_flags for Perl < 5.17.2 */
+
+# ifdef sv_2pv_flags
+#  undef sv_2pv_flags
+# endif
+
+# if defined(PERL_USE_GCC_BRACE_GROUPS)
+#ifndef sv_2pv_flags
+#  define sv_2pv_flags(sv, lp, flags)    ({ SV *_sv_2pv = (sv); STRLEN 
sv_2pv_dummy_; const I32 _flags_2pv = (flags); STRLEN *_lp_2pv = (lp); _lp_2pv 
= _lp_2pv ? : &sv_2pv_dummy_; ((!(_flags_2pv & SV_GMAGIC) || 
!SvGMAGICAL(_sv_2pv)) && SvPOKp(_sv_2pv)) ? ((*(_lp_2pv) = SvCUR(_sv_2pv)), 
SvPVX(_sv_2pv)) : Perl_sv_2pv_flags(aTHX_ _sv_2pv, (_lp_2pv), (_flags_2pv)); })
+#endif
+
+# else
+#ifndef sv_2pv_flags
+#  define sv_2pv_flags(sv, lp, flags)    (((!((flags) & SV_GMAGIC) || 
!SvGMAGICAL(sv)) && SvPOKp(sv)) ? ((*((lp) ? (lp) : &PL_na) = SvCUR(sv)), 
SvPVX(sv)) : Perl_sv_2pv_flags(aTHX_ (sv), (lp), (flags)))
+#endif
+
+# endif
+
+#endif
+
 #if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && 
(PERL_BCDVERSION < 0x5009003) )
 # define D_PPP_SVPV_NOLEN_LP_ARG &PL_na
 #else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/t/71_strict.t 
new/Text-CSV_XS-1.55/t/71_strict.t
--- old/Text-CSV_XS-1.54/t/71_strict.t  1970-01-01 01:00:00.000000000 +0100
+++ new/Text-CSV_XS-1.55/t/71_strict.t  2024-06-07 11:27:45.000000000 +0200
@@ -0,0 +1,194 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+ use Test::More tests => 56;
+#use Test::More "no_plan";
+
+my %err;
+
+BEGIN {
+    require_ok "Text::CSV_XS";
+    plan skip_all => "Cannot load Text::CSV_XS" if $@;
+    require "./t/util.pl";
+
+    open my $fh, "<", "CSV_XS.xs" or die "Cannot read error messages from 
XS\n";
+    while (<$fh>) {
+       m/^    \{ ([0-9]{4}), "([^"]+)"\s+\}/ and $err{$1} = $2;
+       }
+    close $fh;
+    }
+
+my $tfn = "_80test.csv"; END { -f $tfn and unlink $tfn; }
+$| = 1;
+
+my $csv = Text::CSV_XS->new ();
+
+{   my $csv = Text::CSV_XS->new ({ strict => 1 });
+    ok ($csv->parse ("1,2,3"), "Set strict to 3 columns");
+    ok ($csv->parse ("a,b,c"), "3 columns should be correct");
+    is ($csv->parse ("3,4"), 0, "Not enough columns");
+    is (0 + $csv->error_diag, 2014, "Error set correctly");
+    }
+{   my $csv = Text::CSV_XS->new ({ strict => 1 });
+    ok ($csv->parse ("1,2,3"), "Set strict to 3 columns");
+    is ($csv->parse ("3,4,5,6"), 0, "Too many columns");
+    is (0 + $csv->error_diag, 2014, "Error set correctly");
+    }
+{   my $csv = Text::CSV_XS->new ({ strict => 1 });
+    open my $fh, ">", $tfn or die "$tfn: $!\n";
+    ok ($csv->say ($fh, [ 1, 2, 3 ]), "Write line 1");
+    ok ($csv->say ($fh, [ 1, 2, 3 ]), "Write line 2");
+    close $fh;
+    open    $fh, "<", $tfn or die "$tfn: $!\n";
+    ok ((my $r = $csv->getline ($fh)), "Get line 1 under strict");
+    ok ((   $r = $csv->getline ($fh)), "Get line 2 under strict");
+    is ($csv->getline ($fh), undef,    "EOF under strict");
+    is (0 + $csv->error_diag, 2012,    "Error is 2012 instead of 2014");
+    ok ($csv->eof,                     "EOF is set");
+    close $fh;
+    }
+{   my $csv = Text::CSV_XS->new ({ strict => 1 });
+    open my $fh, ">", $tfn or die "$tfn: $!\n";
+    ok ($csv->say   ($fh, [ 1, 2, 3 ]), "Write line 1");
+    ok ($csv->print ($fh, [ 1, 2, 3 ]), "Write line 2 no newline");
+    close $fh;
+    open    $fh, "<", $tfn or die "$tfn: $!\n";
+    ok ((my $r = $csv->getline ($fh)), "Get line 1 under strict");
+    ok ((   $r = $csv->getline ($fh)), "Get line 2 under strict no newline");
+    is ($csv->getline ($fh), undef,    "EOF under strict");
+    is (0 + $csv->error_diag, 2012,    "Error is 2012 instead of 2014");
+    ok ($csv->eof,                     "EOF is set");
+    close $fh;
+    }
+{   my $csv = Text::CSV_XS->new ();
+    open my $fh, ">", $tfn or die "$tfn: $!\n";
+    ok ($csv->say ($fh, [ 1 .. 3 ]),    "Write line 1 (headers)");
+    ok ($csv->say ($fh, [ 1 .. 4 ]),    "Write line 2 (data)");
+    close $fh;
+    my $aoh = Text::CSV_XS::csv (in => $tfn, headers => "auto");
+    is_deeply ($aoh, [{ 1 => 1, 2 => 2, 3 => 3 }], "Column dropped");
+    my @e;
+    eval {
+       local $SIG{__WARN__} = sub { push @e => @_ };
+       $aoh = Text::CSV_XS::csv (in => $tfn, headers => "auto", strict => 1);
+       };
+    is_deeply ($aoh, [],                "Fail under strict");
+    is (scalar @e, 1,                  "Got error");
+    like ($e[0], qr{ 2014 },           "Error 2014");
+
+    open $fh, ">", $tfn or die "$tfn: $!\n";
+    ok ($csv->say ($fh, [ 1 .. 4 ]),    "Write line 1 (headers)");
+    ok ($csv->say ($fh, [ 1 .. 3 ]),    "Write line 2 (data)");
+    close $fh;
+    $aoh = Text::CSV_XS::csv (in => $tfn, headers => "auto");
+    is_deeply ($aoh, [{ 1 => 1, 2 => 2, 3 => 3, 4 => undef }], "Column added");
+    @e = ();
+    eval {
+       local $SIG{__WARN__} = sub { push @e => @_ };
+       $aoh = Text::CSV_XS::csv (in => $tfn, headers => "auto", strict => 1);
+       };
+    is_deeply ($aoh, [],                "Fail under strict");
+    is (scalar @e, 1,                  "Got error");
+    like ($e[0], qr{ 2014 },           "Error 2014");
+    }
+
+foreach my $strict (0, 1) {
+    my $csv = Text::CSV_XS->new ({
+       binary      => 1,
+       comment_str => "#",
+       eol         => "\n",
+       escape_char => '"',
+       quote_char  => '"',
+       sep_char    => "|",
+       strict      => $strict,
+       });
+
+    my $status = $csv->parse ('a|b|"d"');
+    is (0 + $csv->error_diag,    0, "No fail under strict = $strict");
+    $status = $csv->parse ('a|b|c"d"e');       # Loose unescaped quote
+    is (0 + $csv->error_diag, 2034, "Previous error still actual");
+    }
+
+open my $fh, ">", $tfn or die "$tfn: $!\n";
+print $fh <<"EOC";
+1,foo
+2,bar,fail
+3,baz
+4
+5,eox
+EOC
+close $fh;
+
+open $fh, "<", $tfn or die "$tfn: $!\n";
+my @rpt;
+$csv = Text::CSV_XS->new ({ strict => 1, auto_diag => 1 });
+$csv->callbacks (error => sub {
+    my ($err, $msg, $pos, $recno, $fldno) = @_;
+    if ($err == 2014) {
+       push @rpt => [ $recno, $fldno, $pos ];
+       $csv->SetDiag (0);
+       }
+    });
+is_deeply ([ $csv->getline_all ($fh), @rpt ],
+    [[[ 1, "foo" ], [ 2, "bar", "fail" ], [ 3, "baz" ], [ 4 ], [ 5, "eox" ]],
+     [ 2, 3, 12 ], [ 4, 1, 3 ]], "Can catch strict 2014 with \$csv");
+close $fh;
+
+open $fh, "<", $tfn or die "$tfn: $!\n";
+@rpt = ();
+$csv = Text::CSV_XS->new ({ strict => 1, auto_diag => 1, callbacks => {
+    error => sub {
+       my ($err, $msg, $pos, $recno, $fldno) = @_;
+       if ($err == 2014) {
+           push @rpt => [ $recno, $fldno, $pos ];
+           Text::CSV_XS->SetDiag (0);
+           }
+       }}});
+is_deeply ([ $csv->getline_all ($fh), @rpt ],
+    [[[ 1, "foo" ], [ 2, "bar", "fail" ], [ 3, "baz" ], [ 4 ], [ 5, "eox" ]],
+     [ 2, 3, 12 ], [ 4, 1, 3 ]], "Can catch strict 2014 with class");
+close $fh;
+
+# Under strcict, fail un not enough fields.
+# Under non-strict expect the value of the previous record
+foreach my $test (
+       [ "a,b,c\n" . "d,e,f\n". "g,h\n".   "i,j,k\n",
+         "a,b,c\n" . "d,e,f\n". "g,h,f\n". "i,j,k\n", 2, 5 ],
+       [ "a,b,c\n" . "d,e,f\n". "g,h\n"             ,
+         "a,b,c\n" . "d,e,f\n". "g,h,f\n"           , 2, 5 ],
+       [ "a,b,c\n" .            "g,h\n".   "i,j,k\n",
+         "a,b,c\n" .            "g,h,c\n". "i,j,k\n", 1, 5 ],
+       [ "a,b\n"   . "d,e,f\n". "g,h\n".   "i,j,k\n",
+         "a,b,*\n" . "d,e,f\n". "g,h,f\n". "i,j,k\n", 1, 5 ],
+       ) {
+    my ($dta, $dta0, $err_line, $pos) = @$test;
+    open  $fh, ">", $tfn or die "$tfn: $!\n";
+    print $fh $dta;
+    close $fh;
+    my $expect = [ map {[ split m/,/ => $_ ]} grep m/\S/ => split "\n" => 
$dta0 ];
+    foreach my $strict (0, 1) {
+       open $fh, "<", $tfn or die "$tfn: $!\n";
+       my $csv = Text::CSV_XS->new ({ strict => $strict });
+       my ($r1, $r2, $r3) = ("-", "+", "*");
+       $csv->bind_columns (\($r1, $r2, $r3));
+       my @out;
+       eval {
+           while ($csv->getline ($fh)) {
+               push @out => [ $r1, $r2, $r3 ];
+               }
+           };
+       close $fh;
+       my @err = $csv->error_diag;
+       if ($strict) {
+           is ($err[0], 2014, "ENF");
+           splice @$expect, $err_line;
+           }
+       else {
+           is ($err[0], 2012, "EOF");
+           }
+       is_deeply (\@out, $expect, "Bound + strict = $strict");
+       }
+    }
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/t/79_callbacks.t 
new/Text-CSV_XS-1.55/t/79_callbacks.t
--- old/Text-CSV_XS-1.54/t/79_callbacks.t       2021-04-14 14:35:59.000000000 
+0200
+++ new/Text-CSV_XS-1.55/t/79_callbacks.t       2024-06-07 11:24:23.000000000 
+0200
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
- use Test::More tests => 113;
+ use Test::More tests => 111;
 #use Test::More "no_plan";
 
 BEGIN {
@@ -162,46 +162,6 @@
 is_deeply ($csv->getline_all ($fh), [[1,"foo"],[2,"bar"],[4,"zoo"]], "skip");
 close $fh;
 
-open $fh, ">", $tfn or die "$tfn: $!\n";
-print $fh <<"EOC";
-1,foo
-2,bar,fail
-3,baz
-4
-5,eox
-EOC
-close $fh;
-
-open $fh, "<", $tfn or die "$tfn: $!\n";
-my @rpt;
-$csv = Text::CSV_XS->new ({ strict => 1, auto_diag => 1 });
-$csv->callbacks (error => sub {
-    my ($err, $msg, $pos, $recno, $fldno) = @_;
-    if ($err == 2014) {
-       push @rpt => [ $recno, $fldno, $pos ];
-       $csv->SetDiag (0);
-       }
-    });
-is_deeply ([ $csv->getline_all ($fh), @rpt ],
-    [[[ 1, "foo" ], [ 2, "bar", "fail" ], [ 3, "baz" ], [ 4 ], [ 5, "eox" ]],
-     [ 2, 3, 12 ], [ 4, 1, 3 ]], "Can catch strict 2014 with \$csv");
-close $fh;
-
-open $fh, "<", $tfn or die "$tfn: $!\n";
-@rpt = ();
-$csv = Text::CSV_XS->new ({ strict => 1, auto_diag => 1, callbacks => {
-    error => sub {
-       my ($err, $msg, $pos, $recno, $fldno) = @_;
-       if ($err == 2014) {
-           push @rpt => [ $recno, $fldno, $pos ];
-           Text::CSV_XS->SetDiag (0);
-           }
-       }}});
-is_deeply ([ $csv->getline_all ($fh), @rpt ],
-    [[[ 1, "foo" ], [ 2, "bar", "fail" ], [ 3, "baz" ], [ 4 ], [ 5, "eox" ]],
-     [ 2, 3, 12 ], [ 4, 1, 3 ]], "Can catch strict 2014 with class");
-close $fh;
-
 __END__
 1,foo
 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Text-CSV_XS-1.54/t/80_diag.t 
new/Text-CSV_XS-1.55/t/80_diag.t
--- old/Text-CSV_XS-1.54/t/80_diag.t    2024-03-29 10:38:21.000000000 +0100
+++ new/Text-CSV_XS-1.55/t/80_diag.t    2024-06-07 11:20:40.000000000 +0200
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
- use Test::More tests => 347;
+ use Test::More tests => 314;
 #use Test::More "no_plan";
 
 my %err;
@@ -253,75 +253,6 @@
     is (0 + $csv->error_diag, 1001, "Cannot set sep to current sep");
     }
 
-{   my $csv = Text::CSV_XS->new ({ strict => 1 });
-    ok ($csv->parse ("1,2,3"), "Set strict to 3 columns");
-    ok ($csv->parse ("a,b,c"), "3 columns should be correct");
-    is ($csv->parse ("3,4"), 0, "Not enough columns");
-    is (0 + $csv->error_diag, 2014, "Error set correctly");
-    }
-{   my $csv = Text::CSV_XS->new ({ strict => 1 });
-    ok ($csv->parse ("1,2,3"), "Set strict to 3 columns");
-    is ($csv->parse ("3,4,5,6"), 0, "Too many columns");
-    is (0 + $csv->error_diag, 2014, "Error set correctly");
-    }
-{   my $csv = Text::CSV_XS->new ({ strict => 1 });
-    open my $fh, ">", $tfn or die "$tfn: $!\n";
-    ok ($csv->say ($fh, [ 1, 2, 3 ]), "Write line 1");
-    ok ($csv->say ($fh, [ 1, 2, 3 ]), "Write line 2");
-    close $fh;
-    open    $fh, "<", $tfn or die "$tfn: $!\n";
-    ok ((my $r = $csv->getline ($fh)), "Get line 1 under strict");
-    ok ((   $r = $csv->getline ($fh)), "Get line 2 under strict");
-    is ($csv->getline ($fh), undef,    "EOF under strict");
-    is (0 + $csv->error_diag, 2012,    "Error is 2012 instead of 2014");
-    ok ($csv->eof,                     "EOF is set");
-    close $fh;
-    }
-{   my $csv = Text::CSV_XS->new ({ strict => 1 });
-    open my $fh, ">", $tfn or die "$tfn: $!\n";
-    ok ($csv->say   ($fh, [ 1, 2, 3 ]), "Write line 1");
-    ok ($csv->print ($fh, [ 1, 2, 3 ]), "Write line 2 no newline");
-    close $fh;
-    open    $fh, "<", $tfn or die "$tfn: $!\n";
-    ok ((my $r = $csv->getline ($fh)), "Get line 1 under strict");
-    ok ((   $r = $csv->getline ($fh)), "Get line 2 under strict no newline");
-    is ($csv->getline ($fh), undef,    "EOF under strict");
-    is (0 + $csv->error_diag, 2012,    "Error is 2012 instead of 2014");
-    ok ($csv->eof,                     "EOF is set");
-    close $fh;
-    }
-{   my $csv = Text::CSV_XS->new ();
-    open my $fh, ">", $tfn or die "$tfn: $!\n";
-    ok ($csv->say ($fh, [ 1 .. 3 ]),    "Write line 1 (headers)");
-    ok ($csv->say ($fh, [ 1 .. 4 ]),    "Write line 2 (data)");
-    close $fh;
-    my $aoh = Text::CSV_XS::csv (in => $tfn, headers => "auto");
-    is_deeply ($aoh, [{ 1 => 1, 2 => 2, 3 => 3 }], "Column dropped");
-    my @e;
-    eval {
-       local $SIG{__WARN__} = sub { push @e => @_ };
-       $aoh = Text::CSV_XS::csv (in => $tfn, headers => "auto", strict => 1);
-       };
-    is_deeply ($aoh, [],                "Fail under strict");
-    is (scalar @e, 1,                  "Got error");
-    like ($e[0], qr{ 2014 },           "Error 2014");
-
-    open $fh, ">", $tfn or die "$tfn: $!\n";
-    ok ($csv->say ($fh, [ 1 .. 4 ]),    "Write line 1 (headers)");
-    ok ($csv->say ($fh, [ 1 .. 3 ]),    "Write line 2 (data)");
-    close $fh;
-    $aoh = Text::CSV_XS::csv (in => $tfn, headers => "auto");
-    is_deeply ($aoh, [{ 1 => 1, 2 => 2, 3 => 3, 4 => undef }], "Column added");
-    @e = ();
-    eval {
-       local $SIG{__WARN__} = sub { push @e => @_ };
-       $aoh = Text::CSV_XS::csv (in => $tfn, headers => "auto", strict => 1);
-       };
-    is_deeply ($aoh, [],                "Fail under strict");
-    is (scalar @e, 1,                  "Got error");
-    like ($e[0], qr{ 2014 },           "Error 2014");
-    }
-
 {   my $csv = Text::CSV_XS->new;
     eval { $csv->header (undef, "foo"); };
     is (0 + $csv->error_diag, 1014, "Cannot read header from undefined 
source");

Reply via email to