diff options
author | fdrake <fdrake> | 2002-08-23 19:45:44 +0000 |
---|---|---|
committer | fdrake <fdrake> | 2002-08-23 19:45:44 +0000 |
commit | 858c23055c703ea0ec82b18a678cd401d55d5fd0 (patch) | |
tree | 6c19057881f7961897a729fd0f10e095691bfc26 /tests/runtests.c | |
parent | 8778074720d0035b4362276b5e02399140ed4700 (diff) | |
download | libexpat-858c23055c703ea0ec82b18a678cd401d55d5fd0.tar.gz |
Add a test that we do report an undefined entity if there is an
external subset and we load it.
Diffstat (limited to 'tests/runtests.c')
-rw-r--r-- | tests/runtests.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/runtests.c b/tests/runtests.c index ecd1977..f6ff2d4 100644 --- a/tests/runtests.c +++ b/tests/runtests.c @@ -550,6 +550,46 @@ START_TEST(test_wfc_undeclared_entity_standalone) { } END_TEST +static int +external_entity_loader(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId) +{ + char *text = (char *)XML_GetUserData(parser); + XML_Parser *extparser; + + extparser = XML_ExternalEntityParserCreate(parser, context, NULL); + if (extparser == NULL) + fail("Could not create external entity parser."); + if (XML_Parse(extparser, text, strlen(text), 1) == XML_STATUS_ERROR) { + xml_failure(parser); + return 0; + } + return 1; +} + +/* Test that an error is reported for unknown entities if we have read + an external subset. +*/ +START_TEST(test_wfc_undeclared_entity_with_external_subset) { + char *text = + "<?xml version='1.0' encoding='us-ascii'?>\n" + "<!DOCTYPE doc SYSTEM 'foo'>\n" + "<doc>&entity;</doc>"; + char *foo_text = + "<!ELEMENT doc (#PCDATA)*>"; + + XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS); + XML_SetUserData(parser, foo_text); + XML_SetExternalEntityRefHandler(parser, external_entity_loader); + expect_failure(text, + XML_ERROR_UNDEFINED_ENTITY, + "Parser did not report undefined entity with DTD."); +} +END_TEST + /* * Namespaces tests. @@ -736,6 +776,7 @@ make_basic_suite(void) test_wfc_undeclared_entity_unread_external_subset); tcase_add_test(tc_basic, test_wfc_undeclared_entity_no_external_subset); tcase_add_test(tc_basic, test_wfc_undeclared_entity_standalone); + tcase_add_test(tc_basic, test_wfc_undeclared_entity_with_external_subset); suite_add_tcase(s, tc_namespace); tcase_add_checked_fixture(tc_namespace, |