From 6eb8518de5c3d767bb6b58426bb04b2173166f2c Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 12 Mar 2026 15:43:45 +0900 Subject: [PATCH] xml2: Fix undeterministic result with xslt_process() --- contrib/xml2/expected/xml2.out | 10 ++++++++++ contrib/xml2/expected/xml2_1.out | 6 ++++++ contrib/xml2/sql/xml2.sql | 6 ++++++ contrib/xml2/xslt_proc.c | 8 +++++++- 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/contrib/xml2/expected/xml2.out b/contrib/xml2/expected/xml2.out index 3d97b14c3a1e..1906fcf33e2a 100644 --- a/contrib/xml2/expected/xml2.out +++ b/contrib/xml2/expected/xml2.out @@ -261,3 +261,13 @@ $$ $$); ERROR: failed to apply stylesheet +-- empty output +select xslt_process('', +$$ +$$); + xslt_process +-------------- + +(1 row) + diff --git a/contrib/xml2/expected/xml2_1.out b/contrib/xml2/expected/xml2_1.out index 31700040a604..9a2144d58f57 100644 --- a/contrib/xml2/expected/xml2_1.out +++ b/contrib/xml2/expected/xml2_1.out @@ -205,3 +205,9 @@ $$ $$); ERROR: xslt_process() is not available without libxslt +-- empty output +select xslt_process('', +$$ +$$); +ERROR: xslt_process() is not available without libxslt diff --git a/contrib/xml2/sql/xml2.sql b/contrib/xml2/sql/xml2.sql index ef99d164f272..510d18a36799 100644 --- a/contrib/xml2/sql/xml2.sql +++ b/contrib/xml2/sql/xml2.sql @@ -153,3 +153,9 @@ $$ $$); + +-- empty output +select xslt_process('', +$$ +$$); diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c index 2be87bec0cdf..23e5509b99ad 100644 --- a/contrib/xml2/xslt_proc.c +++ b/contrib/xml2/xslt_proc.c @@ -145,7 +145,13 @@ xslt_process(PG_FUNCTION_ARGS) resstat = xsltSaveResultToString((xmlChar **) &resstr, &reslen, restree, stylesheet); - if (resstat >= 0) + /* + * If an empty string has been returned, resstr would be NULL. + * In this case, assume that the result is an empty string. + */ + if (reslen == 0) + result = cstring_to_text_with_len("", reslen); + else if (resstat >= 0) result = cstring_to_text_with_len((char *) resstr, reslen); } PG_CATCH(); -- 2.53.0