Das klingt nach falschen Puffergrößen an der Schnittstelle zu
Expat.
XML::Parser verwendet diese C-Bibliothek um die eigentliche Arbeit des XML-Parsens zu erledigen und muss dafür natürlich Zeichenketten aus Perl in Zeiger auf Datenpuffer und Längenangaben zerlegen, die es an C weiterreichen kann. Wenn die Längenangabe zu groß wäre, würde
Expat zufälligen Müll aus dem Speicher einlesen und versuchen ihn als XML zu interpretieren, was genau das beschriebene Verhalten zur Folge hätte.
When C++ is your hammer, every problem looks like your thumb.