From: Andrey Volk Date: Thu, 7 May 2026 17:14:34 +0000 (+0300) Subject: Merge commit from fork X-Git-Tag: v1.11.0^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ce12717ad7adc9872aae1c5779f5df60e43d2db3;p=thirdparty%2Ffreeswitch.git Merge commit from fork Co-authored-by: Jakub Karolczyk --- diff --git a/src/switch_xml.c b/src/switch_xml.c index d54294df92..0194645640 100644 --- a/src/switch_xml.c +++ b/src/switch_xml.c @@ -838,6 +838,7 @@ static short switch_xml_internal_dtd(switch_xml_root_t root, char *s, switch_siz char q, *c, *t, *n = NULL, *v, **ent, **pe; int i, j; char **sstmp; + switch_bool_t disable_dtd = switch_true(switch_core_get_variable("xml_disable_dtd")); pe = (char **) memcpy(switch_must_malloc(sizeof(SWITCH_XML_NIL)), SWITCH_XML_NIL, sizeof(SWITCH_XML_NIL)); @@ -847,7 +848,7 @@ static short switch_xml_internal_dtd(switch_xml_root_t root, char *s, switch_siz if (!*s) break; - else if (!strncmp(s, "]>&lol1;"; + switch_xml_t xml = switch_xml_parse_str_dynamic((char *)text, SWITCH_TRUE); + char *xml_string = NULL; + + fst_requires(xml); + xml_string = switch_xml_toxml_ex(xml, SWITCH_FALSE, SWITCH_FALSE); + fst_requires(xml_string); + fst_check_string_equals(xml_string, "\n \n hahahahahahahahahahahahahahahahahahahaha\n \n\n"); + free(xml_string); + switch_xml_free(xml); + } + FST_TEST_END() + + FST_TEST_BEGIN(test_dtd_disable) + { + const char *text = "]>&lol1;"; + switch_xml_t xml = NULL; + char *xml_string = NULL; + + switch_core_set_variable("xml_disable_dtd", "true"); + xml = switch_xml_parse_str_dynamic((char *)text, SWITCH_TRUE); + fst_requires(xml); + xml_string = switch_xml_toxml_ex(xml, SWITCH_FALSE, SWITCH_FALSE); + fst_requires(xml_string); + fst_check_string_equals(xml_string, "\n \n &lol1;\n \n\n"); + free(xml_string); + switch_xml_free(xml); + switch_core_set_variable("xml_disable_dtd", "false"); + } + FST_TEST_END() + + FST_TEST_BEGIN(test_dtd_with_comments) + { + const char *text = "]>&lol1;"; + switch_xml_t xml = NULL; + char *xml_string = NULL; + + xml = switch_xml_parse_str_dynamic((char *)text, SWITCH_TRUE); + fst_requires(xml); + xml_string = switch_xml_toxml_ex(xml, SWITCH_FALSE, SWITCH_FALSE); + fst_requires(xml_string); + fst_check_string_equals(xml_string, "\n \n hahahahahahahahahahahahahahahahahahahaha\n \n\n"); + free(xml_string); + switch_xml_free(xml); + } + FST_TEST_END() + + FST_TEST_BEGIN(test_dtd_disable_with_comments) + { + const char *text = "]>&lol1;"; + switch_xml_t xml = NULL; + char *xml_string = NULL; + + switch_core_set_variable("xml_disable_dtd", "true"); + xml = switch_xml_parse_str_dynamic((char *)text, SWITCH_TRUE); + fst_requires(xml); + xml_string = switch_xml_toxml_ex(xml, SWITCH_FALSE, SWITCH_FALSE); + fst_requires(xml_string); + fst_check_string_equals(xml_string, "\n \n &lol1;\n \n\n"); + free(xml_string); + switch_xml_free(xml); + switch_core_set_variable("xml_disable_dtd", "false"); + } + FST_TEST_END() + } FST_SUITE_END() }