Re: Regression with large XML data input

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Erik Wienhold <ewie@ewie.name>, Jim Jones <jim.jones@uni-muenster.de>, Robert Treat <rob@xzilla.net>, Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-07-29T01:23:25Z
Lists: pgsql-hackers
On Mon, Jul 28, 2025 at 04:16:07PM -0400, Tom Lane wrote:
> Erik's v2 is slightly wrong as to the save-and-restore logic for
> the KeepBlanks setting: we need to restore in the error path too,
> and we'd better mark the save variable volatile since it's modified
> inside the PG_TRY.  I made some other cosmetic changes, mainly to
> avoid calculating "options" when it won't be used.  I tested the
> attached v3 against RHEL8's libxml2-2.9.7, as well as against today's
> libxml2 git master, and it accepts the problematic input on both.

This has been applied already as of 71c0921b649d, and I've
double-checked the behavior with my local libxml2 builds as well.
Thanks for the fix, the result looks OK to me!

+            /* set parse options --- have to do this the ugly way */
+            save_keep_blanks = xmlKeepBlanksDefault(preserve_whitespace ? 1 : 0);
[...] 
+        if (save_keep_blanks != -1)
+            xmlKeepBlanksDefault(save_keep_blanks);
[...]
+    if (save_keep_blanks != -1)
+        xmlKeepBlanksDefault(save_keep_blanks);

I didn't spot that this option existed though.  That's an interesting
trick, Erik.  It's a bit weird that we have to to live with this
style, but with the TRY/CATCH blocks we are already relying on it's
not that bad at the end.
--
Michael

Commits

  1. Remove unnecessary complication around xmlParseBalancedChunkMemory.

  2. Avoid regression in the size of XML input that we will accept.

  3. Use xmlParseInNodeContext not xmlParseBalancedChunkMemory.

  4. Revert "Add support for parsing of large XML data (>= 10MB)"