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()
}