@ -663,7 +663,7 @@ xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, bool indent)
volatile xmlBufferPtr buf = NULL ;
volatile xmlBufferPtr buf = NULL ;
volatile xmlSaveCtxtPtr ctxt = NULL ;
volatile xmlSaveCtxtPtr ctxt = NULL ;
ErrorSaveContext escontext = { T_ErrorSaveContext } ;
ErrorSaveContext escontext = { T_ErrorSaveContext } ;
PgXmlErrorContext * xmlerrcxt ;
PgXmlErrorContext * volatile xmlerrcxt = NULL ;
# endif
# endif
if ( xmloption_arg ! = XMLOPTION_DOCUMENT & & ! indent )
if ( xmloption_arg ! = XMLOPTION_DOCUMENT & & ! indent )
@ -704,13 +704,18 @@ xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, bool indent)
return ( text * ) data ;
return ( text * ) data ;
}
}
/* Otherwise, we gotta spin up some error handling. */
/*
xmlerrcxt = pg_xml_init ( PG_XML_STRICTNESS_ALL ) ;
* Otherwise , we gotta spin up some error handling . Unlike most other
* routines in this module , we already have a libxml " doc " structure to
* free , so we need to call pg_xml_init ( ) inside the PG_TRY and be
* prepared for it to fail ( typically due to palloc OOM ) .
*/
PG_TRY ( ) ;
PG_TRY ( ) ;
{
{
size_t decl_len = 0 ;
size_t decl_len = 0 ;
xmlerrcxt = pg_xml_init ( PG_XML_STRICTNESS_ALL ) ;
/* The serialized data will go into this buffer. */
/* The serialized data will go into this buffer. */
buf = xmlBufferCreate ( ) ;
buf = xmlBufferCreate ( ) ;
@ -838,9 +843,9 @@ xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, bool indent)
xmlSaveClose ( ctxt ) ;
xmlSaveClose ( ctxt ) ;
if ( buf )
if ( buf )
xmlBufferFree ( buf ) ;
xmlBufferFree ( buf ) ;
if ( doc )
xmlFreeDoc ( doc ) ;
xmlFreeDoc ( doc ) ;
if ( xmlerrcxt )
pg_xml_done ( xmlerrcxt , true ) ;
pg_xml_done ( xmlerrcxt , true ) ;
PG_RE_THROW ( ) ;
PG_RE_THROW ( ) ;