Submitted By: Xi Ruoyao Date: 2024-06-14 Initial Package Version: 2.13.0 Upstream Status: Applied Origin: Upstream Git repo (see From lines below) Description: Fix one issue breaking the --path option of xmllint and xsltproc, and another issue breaking some valid xpointer attributes in xi:include elements. From 2608baaf92c7e3b90469cefdadb47cbde6039518 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 14 Jun 2024 19:42:40 +0200 Subject: [PATCH] parser: Make failure to load main document a warning Revert the change that made failures to load the main document an error. This fixes the --path option of xmllint and xsltproc. Should fix #733. --- parserInternals.c | 10 +++++----- python/tests/error.py | 2 +- python/tests/input_callback.py | 6 +++--- python/tests/tstLastError.py | 2 +- result/XInclude/fallback.xml.err | 2 +- result/XInclude/fallback2.xml.err | 4 ++-- result/XInclude/fallback4.xml.err | 2 +- result/XInclude/fallback5.xml.err | 32 +++++++++++++++---------------- result/XInclude/fallback6.xml.err | 4 ++-- result/XInclude/fallback7.xml.err | 2 +- result/XInclude/ns1.xml.err | 2 +- result/schemas/import1_0_0.err | 2 +- 12 files changed, 35 insertions(+), 35 deletions(-) diff --git a/parserInternals.c b/parserInternals.c index 6c6c82f81..be751008c 100644 --- a/parserInternals.c +++ b/parserInternals.c @@ -180,12 +180,12 @@ xmlCtxtErrIO(xmlParserCtxtPtr ctxt, int code, const char *uri) return; /* - * Don't report a well-formedness error if an external entity could - * not be found. We assume that inputNr is zero for the document - * entity which is somewhat fragile. + * Only report a warning if a file could not be found. This should + * only be done for external entities, but the external entity loader + * of xsltproc can try multiple paths and assumes that ENOENT doesn't + * raise an error and aborts parsing. */ - if ((ctxt->inputNr > 0) && - ((code == XML_IO_ENOENT) || + if (((code == XML_IO_ENOENT) || (code == XML_IO_NETWORK_ATTEMPT) || (code == XML_IO_UNKNOWN))) { if (ctxt->validate == 0) diff --git a/python/tests/error.py b/python/tests/error.py index 6c8da9990..6668b729b 100755 --- a/python/tests/error.py +++ b/python/tests/error.py @@ -10,7 +10,7 @@ import libxml2 # Memory debug specific libxml2.debugMemory(1) -expect='--> I/O --> error : --> failed to load "missing.xml": No such file or directory\n' +expect='--> I/O --> warning : --> failed to load "missing.xml": No such file or directory\n' err="" def callback(ctx, str): global err diff --git a/python/tests/input_callback.py b/python/tests/input_callback.py index 35a51695c..b24c5c852 100755 --- a/python/tests/input_callback.py +++ b/python/tests/input_callback.py @@ -90,7 +90,7 @@ run_test(desc="Loading entity without custom callback", docpath=startURL, catalog=None, exp_status="not loaded", exp_err=[ (-1, "I/O "), - (-1, "error : "), + (-1, "warning : "), (-1, "failed to load \"py://strings/xml/sample.xml\": No such file or directory\n") ]) @@ -121,7 +121,7 @@ run_test(desc="Retry loading document after unregistering callback", docpath=startURL, catalog=catURL, exp_status="not loaded", exp_err=[ (-1, "I/O "), - (-1, "error : "), + (-1, "warning : "), (-1, "failed to load \"py://strings/xml/sample.xml\": No such file or directory\n") ]) @@ -141,7 +141,7 @@ run_test(desc="Loading using standard i/o after unregistering all callbacks", docpath="tst.xml", catalog=None, exp_status="not loaded", exp_err=[ (-1, "I/O "), - (-1, "error : "), + (-1, "warning : "), (-1, "failed to load \"tst.xml\": No such file or directory\n") ]) diff --git a/python/tests/tstLastError.py b/python/tests/tstLastError.py index 35f5eb3d9..a07999501 100755 --- a/python/tests/tstLastError.py +++ b/python/tests/tstLastError.py @@ -60,7 +60,7 @@ class TestCase(unittest.TestCase): domain=libxml2.XML_FROM_IO, code=libxml2.XML_IO_ENOENT, message='failed to load "dummy.xml": No such file or directory\n', - level=libxml2.XML_ERR_FATAL, + level=libxml2.XML_ERR_WARNING, file=None, line=0) diff --git a/result/XInclude/fallback.xml.err b/result/XInclude/fallback.xml.err index fa6b9e1ad..3239da075 100644 --- a/result/XInclude/fallback.xml.err +++ b/result/XInclude/fallback.xml.err @@ -1 +1 @@ -I/O error : failed to load "test/XInclude/docs/something.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/something.xml": No such file or directory diff --git a/result/XInclude/fallback2.xml.err b/result/XInclude/fallback2.xml.err index d405ac200..288ed212d 100644 --- a/result/XInclude/fallback2.xml.err +++ b/result/XInclude/fallback2.xml.err @@ -1,2 +1,2 @@ -I/O error : failed to load "test/XInclude/docs/b.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/c.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/b.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/c.xml": No such file or directory diff --git a/result/XInclude/fallback4.xml.err b/result/XInclude/fallback4.xml.err index e27a7e6fb..251567760 100644 --- a/result/XInclude/fallback4.xml.err +++ b/result/XInclude/fallback4.xml.err @@ -1 +1 @@ -I/O error : failed to load "test/XInclude/docs/c.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/c.xml": No such file or directory diff --git a/result/XInclude/fallback5.xml.err b/result/XInclude/fallback5.xml.err index 4ec1892d7..f30bc6974 100644 --- a/result/XInclude/fallback5.xml.err +++ b/result/XInclude/fallback5.xml.err @@ -1,16 +1,16 @@ -I/O error : failed to load "test/XInclude/docs/a01.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a02.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a03.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a04.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a05.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a06.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a07.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a08.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a09.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a10.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a11.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a12.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a13.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a14.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a15.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/a16.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a01.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a02.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a03.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a04.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a05.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a06.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a07.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a08.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a09.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a10.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a11.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a12.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a13.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a14.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a15.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/a16.xml": No such file or directory diff --git a/result/XInclude/fallback6.xml.err b/result/XInclude/fallback6.xml.err index d405ac200..288ed212d 100644 --- a/result/XInclude/fallback6.xml.err +++ b/result/XInclude/fallback6.xml.err @@ -1,2 +1,2 @@ -I/O error : failed to load "test/XInclude/docs/b.xml": No such file or directory -I/O error : failed to load "test/XInclude/docs/c.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/b.xml": No such file or directory +I/O warning : failed to load "test/XInclude/docs/c.xml": No such file or directory diff --git a/result/XInclude/fallback7.xml.err b/result/XInclude/fallback7.xml.err index 3861279f5..5acd3cccf 100644 --- a/result/XInclude/fallback7.xml.err +++ b/result/XInclude/fallback7.xml.err @@ -1 +1 @@ -I/O error : failed to load "test/XInclude/without-reader/404.xml": No such file or directory +I/O warning : failed to load "test/XInclude/without-reader/404.xml": No such file or directory diff --git a/result/XInclude/ns1.xml.err b/result/XInclude/ns1.xml.err index ef202341b..d750bc3db 100644 --- a/result/XInclude/ns1.xml.err +++ b/result/XInclude/ns1.xml.err @@ -1 +1 @@ -I/O error : failed to load "test/XInclude/without-reader/b.xml": No such file or directory +I/O warning : failed to load "test/XInclude/without-reader/b.xml": No such file or directory diff --git a/result/schemas/import1_0_0.err b/result/schemas/import1_0_0.err index aafb61070..f780244a8 100644 --- a/result/schemas/import1_0_0.err +++ b/result/schemas/import1_0_0.err @@ -1,4 +1,4 @@ -I/O error : failed to load "test/schemas/import1_0bc.imp": No such file or directory +I/O warning : failed to load "test/schemas/import1_0bc.imp": No such file or directory ./test/schemas/import1_0.xsd:11: element import: Schemas parser warning : Element '{http://www.w3.org/2001/XMLSchema}import': Failed to locate a schema at location 'test/schemas/import1_0bc.imp'. Skipping the import. ./test/schemas/import1_0.xsd:16: element import: Schemas parser warning : Element '{http://www.w3.org/2001/XMLSchema}import': Skipping import of schema located at 'test/schemas/import1_0b.imp' for the namespace 'http://BAR', since this namespace was already imported with the schema located at 'test/schemas/import1_0.imp'. ./test/schemas/import1_0.xsd:26: element element: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'ref': The QName value '{http://BAR}bar.B' does not resolve to a(n) element declaration. -- GitLab From 1aa37db04cf09bcdd0172333eb67bb6597ee75f6 Mon Sep 17 00:00:00 2001 From: Nick Wellnhofer Date: Fri, 14 Jun 2024 20:44:45 +0200 Subject: [PATCH] xinclude: Don't raise error on empty nodeset xmlXPtrEval returning NULL means an empty nodeset if no error code is set. See #733. --- xinclude.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/xinclude.c b/xinclude.c index c177b9396..f338b9943 100644 --- a/xinclude.c +++ b/xinclude.c @@ -1213,7 +1213,7 @@ loaded: #endif } xptr = xmlXPtrEval(fragment, ctxt->xpctxt); - if (xptr == NULL) { + if (ctxt->xpctxt->lastError.code != XML_ERR_OK) { if (ctxt->xpctxt->lastError.code == XML_ERR_NO_MEMORY) xmlXIncludeErrMemory(ctxt); else @@ -1222,6 +1222,8 @@ loaded: fragment); goto error; } + if (xptr == NULL) + goto done; switch (xptr->type) { case XPATH_UNDEFINED: case XPATH_BOOLEAN: @@ -1293,6 +1295,7 @@ loaded: } #endif +done: ret = 0; error: -- GitLab