Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected]
Control: affects -1 + src:libtext-csv-xs-perl
User: [email protected]
Usertags: pu

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

In coordination with the security team, I've uploaded 
libtext-csv-xs-perl/1.60-1+deb13u1 to trixie in order to fix 
https://security-tracker.debian.org/tracker/CVE-2026-7111
aka #1135232

| Text::CSV_XS versions before 1.62 for Perl have a use-after-free when 
| registered callbacks extend the Perl argument stack, which may enable 
| type confusion or memory corruption. …

The fix is 1 quilt patch, taken from the respective uptream commit 
(also included in the 1.62 upstream release, aka tested in the wild), 
which is also already in unstable.

Find attached the complete debdiff against the version in trixie.


Thanks in advance,
gregor

-----BEGIN PGP SIGNATURE-----

iQKTBAEBCgB9FiEE0eExbpOnYKgQTYX6uzpoAYZJqgYFAmn7ep1fFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEQx
RTEzMTZFOTNBNzYwQTgxMDREODVGQUJCM0E2ODAxODY0OUFBMDYACgkQuzpoAYZJ
qgb4Sw//ckWUm+rojfX9peN3hUjtA5DFqwN4LCBgwAklj5gDkzwbgnQuFuV6SHlL
38kWtqQuxRLAQg6lkcngV6M3J1I0f/fnJgGuRtDF463NKc0xo+iQqEYJc6VYy6U1
dFYRRE/z/WYgFfxS1h9A4Gxc4isIXVtn5omZNCeEHXII4fQk8DmFan/eWwGc7cZh
nmBzBwQ4HTZD7kVJ4OHK9BRU12yj+bpJdtnm2gyP7PCiW03xUpkLDZVJvWZfSO+e
8DOVFlXeS3qX7uvSqdqQTMFJnOZ0by/kKdILDeQD8yHkB1+31CDvOcL+YWPjd184
CTLEhD+TrRK1HpOa954FUEYVlquLfct/YfFDA/PmDyZSz9QfCiMmkQgEnL02Bcpw
LBOvtvFDgl1MTC2pvt7rKMzx2xnGwSy6aYo9C+sEOS1JbT2lj0WlR0hkZE1kWCh1
g/wyBC8AU3QRUQhsEtvkGkr6lbvsYO+j6pCsIOEBr5nBjR+k+FdIGp84Vx01L/v1
Fk+a3gFXOFBsbtILCrFMyT+m41G8epbBr6D+aXoZFnp/jPxX0+RxA7touxsEi8pQ
Odr+8GCHS924RPa/syuUAvwi0w6q27EQltLQNppb59ID2Yztf/bOthskvGLehwqp
HiE8natvdAyTrHYFIAZWb9WD4x2BIbWKFRsx0by0jqNEDavsMhc=
=npYS
-----END PGP SIGNATURE-----
diff -Nru libtext-csv-xs-perl-1.60/debian/changelog 
libtext-csv-xs-perl-1.60/debian/changelog
--- libtext-csv-xs-perl-1.60/debian/changelog   2025-02-02 02:20:05.000000000 
+0100
+++ libtext-csv-xs-perl-1.60/debian/changelog   2026-05-06 17:02:23.000000000 
+0200
@@ -1,3 +1,11 @@
+libtext-csv-xs-perl (1.60-1+deb13u1) trixie; urgency=medium
+
+  * Fix possible stack corruption: CVE-2026-7111.
+    Patch taken from upstream Git commit, as released in 1.62.
+    (Closes: #1135232)
+
+ -- gregor herrmann <[email protected]>  Wed, 06 May 2026 17:02:23 +0200
+
 libtext-csv-xs-perl (1.60-1) unstable; urgency=medium
 
   * Import upstream version 1.60.
diff -Nru 
libtext-csv-xs-perl-1.60/debian/patches/0001-Fix-possible-stack-corruption.patch
 
libtext-csv-xs-perl-1.60/debian/patches/0001-Fix-possible-stack-corruption.patch
--- 
libtext-csv-xs-perl-1.60/debian/patches/0001-Fix-possible-stack-corruption.patch
    1970-01-01 01:00:00.000000000 +0100
+++ 
libtext-csv-xs-perl-1.60/debian/patches/0001-Fix-possible-stack-corruption.patch
    2026-05-06 17:02:23.000000000 +0200
@@ -0,0 +1,114 @@
+From c17f31a5f2bf36674748eb4b6e25672f0571a224 Mon Sep 17 00:00:00 2001
+From: "H.Merijn Brand - Tux" <[email protected]>
+Date: Sat, 25 Apr 2026 16:18:57 +0200
+Subject: [PATCH] Fix possible stack corruption (thanks leont) (issue 65)
+
+SPAGAIN required if callbacks can extend the stack
+
+
+Bug: https://github.com/cpan-authors/Text-CSV_XS/issues/65
+Bug-Debian: https://bugs.debian.org/1135232
+Bug-Debian-Security: https://security-tracker.debian.org/tracker/CVE-2026-7111
+
+
+---
+ CSV_XS.xs           | 36 ++++++++++++++++++------------------
+ ChangeLog           |  1 +
+ cpanfile            |  2 +-
+ sandbox/issue-65.pl | 41 ++++++++++++++++++++++++++++++++++++++---
+ 4 files changed, 58 insertions(+), 22 deletions(-)
+
+diff --git a/CSV_XS.xs b/CSV_XS.xs
+index f89859e..c348f83 100644
+--- a/CSV_XS.xs
++++ b/CSV_XS.xs
+@@ -122,6 +122,12 @@ static unsigned char ec, ebcdic2ascii[256] = {
+       croak ("self is not a hash ref");               \
+     hv = (HV *)SvRV (self)
+ 
++#define undef &PL_sv_undef
++#define PUT_RETURN(x) \
++    SPAGAIN;          \
++    ST (0) = x;               \
++    XSRETURN (1)
++
+ /* Keep in sync with .pm! */
+ #define CACHE_ID_quote_char           0
+ #define CACHE_ID_escape_char          1
+@@ -2603,7 +2609,7 @@ BOOT:
+     Perl_load_module (aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvs ("IO::Handle"), 
NULL, NULL, NULL);
+ 
+ void
+-SetDiag (SV *self, int xse, ...)
++SetDiag (SV *self, int xse, SV *line = undef)
+ 
+   PPCODE:
+     HV                *hv;
+@@ -2619,8 +2625,8 @@ SetDiag (SV *self, int xse, ...)
+       ST (0) = sv_2mortal (SvDiag (xse));
+       }
+ 
+-    if (xse && items > 2 && SvPOK (ST (2))) {
+-      sv_setpvn (ST (0),  SvPVX (ST (2)), SvCUR (ST (2)));
++    if (xse && SvPOK (line)) {
++      sv_setpvn (ST (0),  SvPVX (line), SvCUR (line));
+       SvIOK_on  (ST (0));
+       }
+ 
+@@ -2670,8 +2676,8 @@ Parse (SV *self, SV *src, SV *fields, SV *fflags)
+     av  = (AV *)SvRV (fields);
+     avf = (AV *)SvRV (fflags);
+ 
+-    ST (0) = xsParse (self, hv, av, avf, src, 0) ? &PL_sv_yes : &PL_sv_no;
+-    XSRETURN (1);
++    int x = xsParse (self, hv, av, avf, src, 0);
++    PUT_RETURN (x ? &PL_sv_yes : &PL_sv_no);
+     /* XS Parse */
+ 
+ void
+@@ -2691,8 +2697,8 @@ print (SV *self, SV *io, SV *fields)
+       av = (AV *)SvRV (fields);
+       }
+ 
+-    ST (0) = xsCombine (self, hv, av, io, 1) ? &PL_sv_yes : &PL_sv_no;
+-    XSRETURN (1);
++    int x = xsCombine (self, hv, av, io, 1);
++    PUT_RETURN (x ? &PL_sv_yes : &PL_sv_no);
+     /* XS print */
+ 
+ void
+@@ -2706,26 +2712,20 @@ getline (SV *self, SV *io)
+     CSV_XS_SELF;
+     av  = newAV ();
+     avf = newAV ();
+-    ST (0) = xsParse (self, hv, av, avf, io, 1)
+-      ? sv_2mortal (newRV_noinc ((SV *)av))
+-      : &PL_sv_undef;
+-    XSRETURN (1);
++    int x = xsParse (self, hv, av, avf, io, 1);
++    PUT_RETURN (x ? sv_2mortal (newRV_noinc ((SV *)av)) : undef);
+     /* XS getline */
+ 
+ void
+-getline_all (SV *self, SV *io, ...)
++getline_all (SV *self, SV *io, SV *offset = undef, SV *length = undef)
+ 
+   PPCODE:
+     HV        *hv;
+-    SV  *offset, *length;
+ 
+     CSV_XS_SELF;
+ 
+-    offset = items > 2 ? ST (2) : &PL_sv_undef;
+-    length = items > 3 ? ST (3) : &PL_sv_undef;
+-
+-    ST (0) = xsParse_all (self, hv, io, offset, length);
+-    XSRETURN (1);
++    SV *x  = xsParse_all (self, hv, io, offset, length);
++    PUT_RETURN (x);
+     /* XS getline_all */
+ 
+ void
+-- 
+2.53.0
+
diff -Nru libtext-csv-xs-perl-1.60/debian/patches/series 
libtext-csv-xs-perl-1.60/debian/patches/series
--- libtext-csv-xs-perl-1.60/debian/patches/series      1970-01-01 
01:00:00.000000000 +0100
+++ libtext-csv-xs-perl-1.60/debian/patches/series      2026-05-06 
17:02:23.000000000 +0200
@@ -0,0 +1 @@
+0001-Fix-possible-stack-corruption.patch

Reply via email to