[Expat-bugs] [ expat-Bugs-1190887 ] bad charset mangement in DTD
SourceForge.net
noreply at sourceforge.net
Wed Apr 27 11:57:33 CEST 2005
Bugs item #1190887, was opened at 2005-04-27 02:57
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=110127&aid=1190887&group_id=10127
Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Nobody/Anonymous (nobody)
Assigned to: Nobody/Anonymous (nobody)
Summary: bad charset mangement in DTD
Initial Comment:
Run the example hereafter you will have this message :
not well-formed (invalid token) (line 1, offset 17)
The char "é" is in ISO-8859-1but expat doesn't like it.
e-mail : lemathias at gmail.com
#include <stdio.h>
#include "expat.h"
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
static int XMLCALL test(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)
{
fprintf(stderr, "fine\n");
return 0;
}
if ( XML_Parse(extparser, text, strlen(text),
XML_TRUE)
== XML_STATUS_ERROR) {
fprintf(stderr,"%s (line %d, offset %d)\n",
XML_ErrorString(XML_GetErrorCode(extparser)),
XML_GetCurrentLineNumber(extparser),
XML_GetCurrentColumnNumber(extparser));
return XML_STATUS_ERROR;
}
return XML_STATUS_OK;
}
int main(int argc, char *argv[])
{
char *text =
"<?xml version='1.0' encoding='ISO-8859-1'
standalone='yes'?>\n"
"<!DOCTYPE doc SYSTEM 'foo'>\n"
"<doc>&entity;</doc>";
char *foo_text =
"<!ELEMENT Employés (#PCDATA)*>"; /* "é" is in
the ISO-8859-1 charset */
XML_Parser parser = XML_ParserCreate(NULL);
if (parser == NULL)
{
return 0;
}
XML_SetParamEntityParsing(parser,
XML_PARAM_ENTITY_PARSING_ALWAYS);
XML_SetUserData(parser, foo_text);
XML_SetExternalEntityRefHandler(parser, test);
if (XML_Parse(parser, text, strlen(text), XML_TRUE)
== XML_STATUS_OK)
{
fprintf(stderr, "fine\n");
return 0;
}
if (XML_GetErrorCode(parser) !=
XML_ERROR_UNDEFINED_ENTITY)
{
fprintf(stderr, "fine\n");
return 0;
}
return 1;
}
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=110127&aid=1190887&group_id=10127
More information about the Expat-bugs
mailing list