#1151096 libtext-csv-xs-perl: CVE-2026-110753 CVE-2026-110752 CVE-2026-110754 CVE-2026-110755 CVE-2026-110756 CVE-2026-110757 CVE-2026-110758 CVE-2026-110759

Package:
src:libtext-csv-xs-perl
Source:
src:libtext-csv-xs-perl
Submitter:
Salvatore Bonaccorso
Date:
2026-10-17 15:39:03 UTC
Severity:
normal
Tags:
#1151096#5
Date:
2026-10-17 06:08:03 UTC
From:
To:
Hi,

The following vulnerabilities were published for libtext-csv-xs-perl.

CVE-2026-110753[0]:
| Text::CSV_XS versions from 1.46 before 1.65 for Perl have a use-
| after-free of bind_columns variables when skip_empty_rows skips an
| empty line in getline.  With bind_columns, the parser writes each
| field into the caller's own scalar without taking a reference to it.
| When skip_empty_rows skips an empty last line, the parser frees the
| current field scalar without checking whether it is bound, dropping
| one reference from the application's variable. The "eof" mode does
| the same on any empty line.  The variable is then freed while the
| application still references it, so later code uses freed memory and
| can crash the process.


CVE-2026-110752[1]:
| Text::CSV_XS versions before 1.65 for Perl allow memory exhaustion
| by allocating one entry per index of an RFC 7111 selector in
| fragment.  fragment expands a row= or col= selector into an array
| with one element per selected index before it reads any data, and it
| does not clamp an explicit end column in a cell= selector to the
| row. Only the syntax and order of the ranges are checked, so
| row=1-400000000 on a two-line file allocates 400 million elements.
| An application that passes a request-supplied fragment to fragment
| or csv can be made to exhaust memory, which ends the process with an
| Out of memory error that eval cannot catch.


CVE-2026-110754[2]:
| Text::CSV_XS versions before 1.65 for Perl leak the parsed fields of
| a record that fails to parse in getline.  getline collects the
| fields of a record into a new array and returns a reference to it
| only when the parse succeeds. When the record has a syntax error,
| getline returns undef and never frees the array or the fields parsed
| before the error.  A long-running process parsing untrusted CSV
| retains every malformed record it is sent, so repeated malformed
| input exhausts its memory.


CVE-2026-110755[3]:
| Text::CSV_XS versions before 1.65 for Perl allow quadratic CPU use
| by copying the unparsed remainder per record of CR-only input in
| getline.  With eol unset, the default, getline reads with Perl's
| default line separator, so input with CR-only line endings arrives
| as one chunk. After each record the parser copies the whole unparsed
| remainder into a new buffer, which the next call parses and copies
| again, so the work grows with the square of the input size.  A
| reader with default options that is sent CSV with classic Mac line
| endings spends seconds of CPU time on a megabyte of input.


CVE-2026-110756[4]:
| Text::CSV_XS versions before 1.65 for Perl drop the end of a record
| and its line ending when a UTF-8 flagged field precedes invalid
| UTF-8 bytes in print.  When a record contains a UTF-8 flagged field,
| print holds back trailing bytes that are not valid UTF-8 at each
| buffer flush, so that a character split across two flushes can be
| completed. Nothing writes the held-back bytes after the record's
| final flush. A record whose last field ends in such a byte loses it,
| any closing quote and the line ending, while print still returns
| true. combine is not affected.  The next record is written onto the
| same line, or, when the last field was quoted, the missing closing
| quote makes a reader take every following record as part of that
| field.


CVE-2026-110757[5]:
| Text::CSV_XS versions before 1.65 for Perl allow record splitting by
| writing strings used as numbers without quotes in combine.  combine
| and print do not check whether a field needs quotes when its value
| has Perl's integer or numeric flag set. Perl sets these flags on a
| string used in a numeric operation when it parses as a number, which
| allows leading and trailing whitespace. With binary set, as csv does
| by default, "12\n" passes a check such as $qty > 0 and is then
| written unquoted with its newline.  A value validated as a number
| can end the record early and turn the fields after it into a
| separate row.


CVE-2026-110758[6]:
| Text::CSV_XS versions before 1.65 for Perl read before the start of
| an all-blank field under allow_whitespace in strip_trail_whitespace.
| Under allow_whitespace, strip_trail_whitespace removes trailing
| spaces and tabs from each unquoted field without stopping at the
| start of the field. For a field of only blanks it reads the byte
| before the field's heap buffer. If that byte is also a space or tab,
| it may be zeroed and the walk continue backwards, depending on what
| the allocator placed there.  Leading blanks are normally skipped
| before a field is stored, but an all-blank field still arrives after
| a leading escape_char that differs from quote_char, or as a quoted
| field in getline when its line ends in two CRs.


CVE-2026-110759[7]:
| Text::CSV_XS versions before 1.65 for Perl return a 0xFF byte that
| is not in the input for an empty last field followed by a lone CR in
| parse.  When the input to parse ends in a separator and a lone CR,
| the parser treats the end of the input as the next character and
| stores the end-of-file marker in the field as the byte 0xFF. With
| binary set, parse("a,\r") returns the fields "a" and "\xFF". On
| UTF-8 flagged input the last field is a UTF-8 flagged string holding
| that lone byte, which is malformed UTF-8. The same input with a non-
| empty last field is rejected as an error.  A CRLF file read line by
| line and chomped ends this way when its last column is empty, so the
| application receives a byte that is not in its input.

All fixes are included in 1.65 upstream. In the security-tracker we
link to the individual advisories and fixing commits for potential
backporting.

If you fix the vulnerabilities please also make sure to include the
CVE (Common Vulnerabilities & Exposures) ids in your changelog entry.

For further information see:

[0] https://security-tracker.debian.org/tracker/CVE-2026-110753
https://www.cve.org/CVERecord?id=CVE-2026-110753
[1] https://security-tracker.debian.org/tracker/CVE-2026-110752
https://www.cve.org/CVERecord?id=CVE-2026-110752
[2] https://security-tracker.debian.org/tracker/CVE-2026-110754
https://www.cve.org/CVERecord?id=CVE-2026-110754
[3] https://security-tracker.debian.org/tracker/CVE-2026-110755
https://www.cve.org/CVERecord?id=CVE-2026-110755
[4] https://security-tracker.debian.org/tracker/CVE-2026-110756
https://www.cve.org/CVERecord?id=CVE-2026-110756
[5] https://security-tracker.debian.org/tracker/CVE-2026-110757
https://www.cve.org/CVERecord?id=CVE-2026-110757
[6] https://security-tracker.debian.org/tracker/CVE-2026-110758
https://www.cve.org/CVERecord?id=CVE-2026-110758
[7] https://security-tracker.debian.org/tracker/CVE-2026-110759
https://www.cve.org/CVERecord?id=CVE-2026-110759

Regards,
Salvatore

#1151096#10
Date:
2026-10-17 15:36:38 UTC
From:
To:
We believe that the bug you reported is fixed in the latest version of
libtext-csv-xs-perl, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1151096@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
gregor herrmann <gregoa@debian.org> (supplier of updated libtext-csv-xs-perl package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Sat, 17 Oct 2026 17:13:30 +0200
Source: libtext-csv-xs-perl
Architecture: source
Version: 1.65-1
Distribution: unstable
Urgency: medium
Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
Changed-By: gregor herrmann <gregoa@debian.org>
Closes: 1151096
Changes:
 libtext-csv-xs-perl (1.65-1) unstable; urgency=medium
 .
   * Import upstream version 1.65.
     + parse (): report trailing lone CR, do not store EOF as 0xFF
       (CVE-2026-110759)
     + Under allow_whitespace, do not strip beyond field start
       (CVE-2026-110758)
     + combine (): decide quoting from the bytes, not the NV flags
       (CVE-2026-110757)
     + Flush saved bytes in Combine ()
       (CVE-2026-110756)
     + Re-use AHEAD with \r instead of copying
       (CVE-2026-110755)
     + getline (): free the result array when the parse fails
       (CVE-2026-110754)
     + Do not free the bound column scalar in skip_empty_rows
       (CVE-2026-110753)
     + fragment (): do not size memory by the selector integers
       (CVE-2026-110752)
     Closes: #1151096
   * Update upstream email address.
   * Convert debian/watch to version 5.
   * Add ITP bug in 0.15-1.
     Changes-By: lintian-brush
   * Update upstream metadata fields: Repository, Repository-Browse,
     Security-Contact.
     Changes-By: lintian-brush
Checksums-Sha1:
 e4a860cc2a3f6d28818da58c27522d9de14c485d 2638 libtext-csv-xs-perl_1.65-1.dsc
 a5485850a77b389cad3a27bd395f0e0acc25e9ea 289515 libtext-csv-xs-perl_1.65.orig.tar.gz
 649485b9a8b7906a8ddee5c33ffd8f8f17056730 8840 libtext-csv-xs-perl_1.65-1.debian.tar.xz
 20feb52fda8f04084c7e23c988b9599b372fdacd 626764 libtext-csv-xs-perl_1.65-1.git.tar.xz
 caf4a2e9aaab3302a60b81ee2e507de12fe4d100 17768 libtext-csv-xs-perl_1.65-1_source.buildinfo
Checksums-Sha256:
 ec9c6e7d6b39664d6bb80cf7c71ee5ed09013344babfd1eb004a4752bc4575e8 2638 libtext-csv-xs-perl_1.65-1.dsc
 4f0c16457c87def295a994e9c4ba397a8baafad96cefaf2d61483125f90ff974 289515 libtext-csv-xs-perl_1.65.orig.tar.gz
 cf64297e08be8de60e482839fb0dbc20e124a9f1452d66ead7ba828228479e2e 8840 libtext-csv-xs-perl_1.65-1.debian.tar.xz
 1dd2ba960fd7c60fbab976294e07ed4792e8ff11519c69440e731ba97b0a31a6 626764 libtext-csv-xs-perl_1.65-1.git.tar.xz
 9bb014b32ce4366ca1de286b4b1ab6fa69611b3ac2f2352b0a0ab5264ab9e6b5 17768 libtext-csv-xs-perl_1.65-1_source.buildinfo
Files:
 4a5a24431d7ce224f68f3fe5fe4c158a 2638 perl optional libtext-csv-xs-perl_1.65-1.dsc
 abfda9c285a3a5429d0b10c59a948b4d 289515 perl optional libtext-csv-xs-perl_1.65.orig.tar.gz
 ac374c3e36daaa143344f4cc9e0a748f 8840 perl optional libtext-csv-xs-perl_1.65-1.debian.tar.xz
 15f038c162cbcf79aaebaf0df09374ba 626764 perl None libtext-csv-xs-perl_1.65-1.git.tar.xz
 aeecf74d543ae21bffc16e4d1ed8a083 17768 perl optional libtext-csv-xs-perl_1.65-1_source.buildinfo
Git-Tag-Info: tag=915fc7878cd8132d3aa5a3bba96a21bfec8239f6 fp=d1e1316e93a760a8104d85fabb3a68018649aa06
Git-Tag-Tagger: gregor herrmann <gregoa@debian.org>
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEN02M5NuW6cvUwJcqYG0ITkaDwHkFAmrTke0ACgkQYG0ITkaD
wHkwJRAAihSks63JJCnttTif+knJFTm+qnX7kAajTmgKnDRkzeBDVd0U3YIOp2q0
AjqJanwLLjJJYUPGOY7TtWEMSBpeGEGQb9Vinn5NSQZXDydHwrycRVnSmqzU40Cj
8BgmCHy966ULByJlU7c07w9USEwTs9ob+HcTIWcqS7JSAduHbDayVmXlzKvAsqK7
goI+cFoCC/UzOCTE1dLGudNA253dNL/BdqGn8lkQWby0kVrIA9yQYBrZxm09qNK1
Rd5beFAuzVsOh4tiKKSh7/RLfHu7Kn+m10x92eCEch8TN69YCMxnduzodXfC0pX8
yVZV24ul5apnSo3mkhGHFFzymo0K50iEdMRAV3giWWou1DheQsNMQQz9lRW/5jq2
0kAPWSc0meoZFIoLn+rZc48QTbsLhE6ntAFHcyAgCstjIoVIhaCNXgtkIaiX1LjP
zcYYq+ZEsDB3uOMo6HfQB2QQyZruJhC8IEEouP+0GFyPyq/V773SmOpGEYoeJwYD
xxoivmAn8XJVgTjhi7Vg9pqQNEMGgM4zCAi53Ayu0kFkJJzQc/TSXkwk6Ihr14Y5
YBwHWKVeEtLBVjmAHwqU+2HekAcgQQQRGbxaWIPzXcfYEJPidw4p421MIRgeoYgp
6TmlhCpHuhc1Gl6HHGMIZ0seX3KUs+LeIbgIKKFYIBvxsf3QCXs=
=n8sJ
-----END PGP SIGNATURE-----