libcomps/fix-a-crash-on-valid-xml-with-but-no-comps.patch
Mattia Verga 015032f71a Fix patch
2023-10-04 14:08:51 +02:00

45 lines
2.1 KiB
Diff

diff -U 3 -dHrN a/libcomps/src/comps_parse.c b/libcomps/src/comps_parse.c
--- a/libcomps/src/comps_parse.c 2022-09-09 13:55:00.000000000 +0200
+++ b/libcomps/src/comps_parse.c 2023-10-04 14:00:50.722561035 +0200
@@ -176,21 +176,21 @@
}
void __comps_after_parse(COMPS_Parsed *parsed) {
- if (parsed->doctype_name) {
+ if (parsed->doctype_name && parsed->comps_doc) {
COMPS_OBJECT_DESTROY(parsed->comps_doc->doctype_name);
parsed->comps_doc->doctype_name = (COMPS_Str*)
COMPS_OBJECT_INCREF(parsed->doctype_name);
} else {
//parsed->comps_doc->doctype_name = comps_str(comps_default_doctype_name);
}
- if (parsed->doctype_sysid) {
+ if (parsed->doctype_sysid && parsed->comps_doc) {
COMPS_OBJECT_DESTROY(parsed->comps_doc->doctype_sysid);
parsed->comps_doc->doctype_sysid = (COMPS_Str*)
COMPS_OBJECT_INCREF(parsed->doctype_sysid);
} else {
//parsed->comps_doc->doctype_sysid = comps_str(comps_default_doctype_sysid);
}
- if (parsed->doctype_pubid) {
+ if (parsed->doctype_pubid && parsed->comps_doc) {
COMPS_OBJECT_DESTROY(parsed->comps_doc->doctype_pubid);
parsed->comps_doc->doctype_pubid = (COMPS_Str*)
COMPS_OBJECT_INCREF(parsed->doctype_pubid);
diff -U 3 -dHrN a/libcomps/src/python/tests/__test.py b/libcomps/src/python/tests/__test.py
--- a/libcomps/src/python/tests/__test.py 2023-10-04 14:00:25.970189009 +0200
+++ b/libcomps/src/python/tests/__test.py 2023-10-04 14:00:50.723080381 +0200
@@ -1270,5 +1270,14 @@
#suite = unittest.TestLoader().loadTestsFromTestCase(EnvListTest)
#MyRunner(verbosity=2).run(suite)
+ VALID_XML_HEADER_NO_COMPS = """<?xml version="1.0" encoding="UTF-8"?>
+ <!DOCTYPE variants PUBLIC "-//Red Hat, Inc.//DTD Variants info//EN" "variants.dtd">
+ <variants>
+ </variants>"""
+ comps6 = libcomps.Comps()
+ ret = comps6.fromxml_str(str(VALID_XML_HEADER_NO_COMPS))
+ # return code 1 is non fatal error
+ self.assertTrue(ret == 1, comps6.get_last_errors())
+