aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/xml.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-09-16 00:49:41 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-09-16 00:49:41 +0000
commit8948ee37e570735e881439230d4fc6f7c9cbad63 (patch)
treee3f675b9a946139d2e73a52be2d83db5296b4f44 /src/backend/utils/adt/xml.c
parent1cd935609fd47c17f60d8c30b745be936f21f4c3 (diff)
downloadpostgresql-8948ee37e570735e881439230d4fc6f7c9cbad63.tar.gz
postgresql-8948ee37e570735e881439230d4fc6f7c9cbad63.zip
Fix multiple memory leaks in xml_out(). Per report from Matt Magoffin.
Diffstat (limited to 'src/backend/utils/adt/xml.c')
-rw-r--r--src/backend/utils/adt/xml.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c
index fd0c0ee80f8..1a053490289 100644
--- a/src/backend/utils/adt/xml.c
+++ b/src/backend/utils/adt/xml.c
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.76 2008/08/25 22:42:34 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/xml.c,v 1.77 2008/09/16 00:49:41 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -208,22 +208,16 @@ xml_in(PG_FUNCTION_ARGS)
static char *
xml_out_internal(xmltype *x, pg_enc target_encoding)
{
- char *str;
- size_t len;
+ char *str = text_to_cstring((text *) x);
#ifdef USE_LIBXML
+ size_t len = strlen(str);
xmlChar *version;
- xmlChar *encoding;
int standalone;
int res_code;
-#endif
-
- str = text_to_cstring((text *) x);
- len = strlen(str);
-#ifdef USE_LIBXML
if ((res_code = parse_xml_decl((xmlChar *) str,
- &len, &version, &encoding, &standalone)) == 0)
+ &len, &version, NULL, &standalone)) == 0)
{
StringInfoData buf;
@@ -241,6 +235,10 @@ xml_out_internal(xmltype *x, pg_enc target_encoding)
}
appendStringInfoString(&buf, str + len);
+ if (version)
+ xmlFree(version);
+ pfree(str);
+
return buf.data;
}