---
id: "CVE-2026-110758"
kind: "vulnerability"
aliases: ["CVE-2026-110758"]
title: "Text::CSV_XS for Perl: out-of-bounds read on blank CSV fields"
severity: "high"
cvss: 7.5
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["csv-parsing", "package", "perl", "text-csv-xs"]
not_affected_if: ["allow-whitespace-off", "trusted-input-only"]
published_at: "2026-10-16T23:17:01+00:00"
first_seen_at: "2026-10-23T21:57:14+00:00"
updated_at: "2026-10-25T03:24:47+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-110758", "first_seen_at": "2026-10-23T21:57:14+00:00"}]
---

# Text::CSV_XS for Perl: out-of-bounds read on blank CSV fields

Text::CSV_XS before 1.65 reads one byte before an all-blank unquoted field when allow_whitespace is enabled, and can zero bytes in memory the allocator placed there. The sources describe memory corruption and an out-of-bounds read; they do not describe code execution.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed Text::CSV_XS version with `perl -MText::CSV_XS -e 'print $Text::CSV_XS::VERSION'`
- Search code and cpanfile/Makefile.PL for `allow_whitespace` and `strip_trail_whitespace` settings
- unknown for whether specific inputs reach the affected path

## Fix

- Upgrade Text::CSV_XS to `1.65` or later

## Timeline

- 2026-10-23T21:57:14+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-110758

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
