[Faxpp-devel] SF.net SVN: faxpp:[59] trunk/faxpp/src/xml_parser.c
Status: Beta
Brought to you by:
jpcs
From: <jp...@us...> - 2011-04-05 16:45:59
|
Revision: 59 http://faxpp.svn.sourceforge.net/faxpp/?rev=59&view=rev Author: jpcs Date: 2011-04-05 16:45:53 +0000 (Tue, 05 Apr 2011) Log Message: ----------- Fix DTD parsing so that entities pointing to external subsets in the internal subset don't stop the main external subset from being loaded. Modified Paths: -------------- trunk/faxpp/src/xml_parser.c Modified: trunk/faxpp/src/xml_parser.c =================================================================== --- trunk/faxpp/src/xml_parser.c 2008-12-04 14:43:42 UTC (rev 58) +++ trunk/faxpp/src/xml_parser.c 2011-04-05 16:45:53 UTC (rev 59) @@ -627,6 +627,22 @@ /* static void p_print_token(FAXPP_ParserEnv *env) */ /* { */ /* char buf[BUF_SIZE + 1]; */ + +/* if(env->tenv->base_uri.ptr != 0) { */ +/* if(env->tenv->base_uri.len > BUF_SIZE) { */ +/* strncpy(buf + 3, env->tenv->base_uri.ptr + env->tenv->base_uri.len - BUF_SIZE + 3, BUF_SIZE - 3); */ +/* buf[0] = '.'; */ +/* buf[1] = '.'; */ +/* buf[2] = '.'; */ +/* buf[BUF_SIZE] = 0; */ +/* } */ +/* else { */ +/* strncpy(buf, env->tenv->base_uri.ptr, env->tenv->base_uri.len); */ +/* buf[env->tenv->result_token.value.len] = 0; */ +/* } */ +/* printf("%s", buf); */ +/* } */ + /* if(env->tenv->result_token.value.ptr != 0) { */ /* if(env->tenv->result_token.value.len > BUF_SIZE) { */ /* strncpy(buf, env->tenv->result_token.value.ptr, BUF_SIZE - 3); */ @@ -639,11 +655,11 @@ /* strncpy(buf, env->tenv->result_token.value.ptr, env->tenv->result_token.value.len); */ /* buf[env->tenv->result_token.value.len] = 0; */ /* } */ -/* printf("%03d:%03d Token ID: %s, Token: \"%s\"\n", env->tenv->result_token.line, */ +/* printf(":%03d:%03d Token ID: %s, Token: \"%s\"\n", env->tenv->result_token.line, */ /* env->tenv->result_token.column, FAXPP_token_to_string(env->tenv->result_token.type), buf); */ /* } */ /* else { */ -/* printf("%03d:%03d Token ID: %s\n", env->tenv->result_token.line, env->tenv->result_token.column, */ +/* printf(":%03d:%03d Token ID: %s\n", env->tenv->result_token.line, env->tenv->result_token.column, */ /* FAXPP_token_to_string(env->tenv->result_token.type)); */ /* } */ /* } */ @@ -659,7 +675,7 @@ (err) = (env)->tenv->state((env)->tenv); \ p_check_err((err), (env)); \ } \ -/* p_print_token(env); */ \ + /* p_print_token(env); */ \ } \ } @@ -978,7 +994,8 @@ env->event.type = END_EXTERNAL_ENTITY_EVENT; } else if(env->tenv->external_subset) { - if(env->tenv->prev->internal_subset) { + if(env->tenv->prev->internal_subset || + env->tenv->prev->external_subset) { env->next_event = nc_dtd_next_event; } else { @@ -1165,17 +1182,18 @@ return NO_ERROR; default: env->tenv->buffered_token = 1; - p_reset_event(env); if(env->tenv->external_subset || env->tenv->external_in_markup_entity) { // TBD event for start of external subset - jpcs env->next_event = nc_dtd_next_event; } else if(env->tenv->external_parsed_entity) { + p_reset_event(env); env->event.type = START_EXTERNAL_ENTITY_EVENT; env->next_event = env->main_next_event; } else { + p_reset_event(env); env->event.type = START_DOCUMENT_EVENT; env->next_event = env->main_next_event; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |