Ensure xmlFree(NULL) is a no-op instead of a core dump. Per report from
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 10 Jun 2009 03:44:35 +0000 (03:44 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 10 Jun 2009 03:44:35 +0000 (03:44 +0000)
Sergey Burladyan, there are at least some dank corners of libxml2 that
assume this behavior, even though their published documentation suggests
they shouldn't.

This is only really a live problem in 8.3, but the code is still there
for possible debugging use in HEAD, so patch both branches.

src/backend/utils/adt/xml.c

index f6292b913772cb0a1e54ae99d78928bb794310e5..9b34a7abbc7cf8a7a717ac8472e51a569a115fb8 100644 (file)
@@ -1293,7 +1293,9 @@ xml_repalloc(void *ptr, size_t size)
 static void
 xml_pfree(void *ptr)
 {
-       pfree(ptr);
+       /* At least some parts of libxml assume xmlFree(NULL) is allowed */
+       if (ptr)
+               pfree(ptr);
 }