On 09.02.23 02:01, Peter Smith wrote:
> OTOH, if you are having to check for NULL doc anyway, maybe it's just
> as easy only doing that up-front. Then you could quick-exit the
> function without calling xmlDocDumpFormatMemory etc. in the first
> place. For example:
>
> doc = xml_parse(arg, XMLOPTION_DOCUMENT, false, GetDatabaseEncoding(), NULL);
> if (!doc)
> return 0;
I see your point. If I got it right, you're suggesting the following
change in the PG_TRY();
PG_TRY();
{
int nbytes;
if(!doc)
xml_ereport(xmlerrcxt, ERROR, ERRCODE_INTERNAL_ERROR,
"could not parse the given XML document");
xmlDocDumpFormatMemory(doc, &xmlbuf, &nbytes, 1);
if(!nbytes || xmlerrcxt->err_occurred)
xml_ereport(xmlerrcxt, ERROR, ERRCODE_INTERNAL_ERROR,
"could not indent the given XML document");
initStringInfo(&buf);
appendStringInfoString(&buf, (const char *)xmlbuf);
}
.. which will catch the doc == NULL before calling xmlDocDumpFormatMemory.
Is it what you suggest?
Thanks a lot for the thorough review!
Best, Jim