On 09.02.23 08:23, Tom Lane wrote:
Um ... why are you using PG_TRY here at all? It seems like you have full control of the actually likely error cases. The only plausible error out of the StringInfo calls is OOM, and you probably don't want to trap that at all.
My intention was to catch any unexpected error from xmlDocDumpFormatMemory and handle it properly. But I guess you're right, I can control the likely error cases by checking doc and nbytes.
You suggest something along these lines? xmlDocPtr doc; xmlChar *xmlbuf = NULL; text *arg = PG_GETARG_TEXT_PP(0); StringInfoData buf; int nbytes;doc = xml_parse(arg, XMLOPTION_DOCUMENT, false, GetDatabaseEncoding(), NULL);
if(!doc) elog(ERROR, "could not parse the given XML document"); xmlDocDumpFormatMemory(doc, &xmlbuf, &nbytes, 1); xmlFreeDoc(doc); if(!nbytes) elog(ERROR, "could not indent the given XML document"); initStringInfo(&buf); appendStringInfoString(&buf, (const char *)xmlbuf); xmlFree(xmlbuf); PG_RETURN_XML_P(stringinfo_to_xmltype(&buf)); Thanks! Best, Jim
smime.p7s
Description: S/MIME Cryptographic Signature