mirror of
https://github.com/libexpat/libexpat.git
synced 2025-04-06 13:45:00 +00:00
Replaced all literal references to ASCII characters with macros that
explicitly specify a hex code point. This should make it work on EBCDIC systems. Patch provided by Scott Klement for bug #1690883.
This commit is contained in:
parent
37cfa469d4
commit
5e0d9e6078
2 changed files with 76 additions and 58 deletions
|
@ -83,3 +83,10 @@
|
|||
#define ASCII_LSQB 0x5B
|
||||
#define ASCII_RSQB 0x5D
|
||||
#define ASCII_UNDERSCORE 0x5F
|
||||
#define ASCII_LPAREN 0x28
|
||||
#define ASCII_RPAREN 0x29
|
||||
#define ASCII_FF 0x0C
|
||||
#define ASCII_SLASH 0x2F
|
||||
#define ASCII_HASH 0x23
|
||||
#define ASCII_PIPE 0x7C
|
||||
#define ASCII_COMMA 0x2C
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <expat_config.h>
|
||||
#endif /* ndef COMPILED_FROM_DSP */
|
||||
|
||||
#include "ascii.h"
|
||||
#include "expat.h"
|
||||
|
||||
#ifdef XML_UNICODE
|
||||
|
@ -668,10 +669,12 @@ XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep)
|
|||
}
|
||||
|
||||
static const XML_Char implicitContext[] = {
|
||||
'x', 'm', 'l', '=', 'h', 't', 't', 'p', ':', '/', '/',
|
||||
'w', 'w', 'w', '.', 'w', '3', '.', 'o', 'r', 'g', '/',
|
||||
'X', 'M', 'L', '/', '1', '9', '9', '8', '/',
|
||||
'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\0'
|
||||
ASCII_x, ASCII_m, ASCII_l, ASCII_EQUALS, ASCII_h, ASCII_t, ASCII_t, ASCII_p,
|
||||
ASCII_COLON, ASCII_SLASH, ASCII_SLASH, ASCII_w, ASCII_w, ASCII_w,
|
||||
ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g,
|
||||
ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L, ASCII_SLASH, ASCII_1, ASCII_9,
|
||||
ASCII_9, ASCII_8, ASCII_SLASH, ASCII_n, ASCII_a, ASCII_m, ASCII_e,
|
||||
ASCII_s, ASCII_p, ASCII_a, ASCII_c, ASCII_e, '\0'
|
||||
};
|
||||
|
||||
XML_Parser XMLCALL
|
||||
|
@ -764,7 +767,7 @@ parserCreate(const XML_Char *encodingName,
|
|||
unknownEncodingHandler = NULL;
|
||||
unknownEncodingHandlerData = NULL;
|
||||
|
||||
namespaceSeparator = '!';
|
||||
namespaceSeparator = ASCII_EXCL;
|
||||
ns = XML_FALSE;
|
||||
ns_triplets = XML_FALSE;
|
||||
|
||||
|
@ -2815,7 +2818,7 @@ storeAtts(XML_Parser parser, const ENCODING *enc,
|
|||
return XML_ERROR_NO_MEMORY;
|
||||
uriHash = CHAR_HASH(uriHash, c);
|
||||
}
|
||||
while (*s++ != XML_T(':'))
|
||||
while (*s++ != XML_T(ASCII_COLON))
|
||||
;
|
||||
do { /* copies null terminator */
|
||||
const XML_Char c = *s;
|
||||
|
@ -2889,7 +2892,7 @@ storeAtts(XML_Parser parser, const ENCODING *enc,
|
|||
if (!binding)
|
||||
return XML_ERROR_UNBOUND_PREFIX;
|
||||
localPart = tagNamePtr->str;
|
||||
while (*localPart++ != XML_T(':'))
|
||||
while (*localPart++ != XML_T(ASCII_COLON))
|
||||
;
|
||||
}
|
||||
else if (dtd->defaultPrefix.binding) {
|
||||
|
@ -2944,17 +2947,21 @@ addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId,
|
|||
const XML_Char *uri, BINDING **bindingsPtr)
|
||||
{
|
||||
static const XML_Char xmlNamespace[] = {
|
||||
'h', 't', 't', 'p', ':', '/', '/',
|
||||
'w', 'w', 'w', '.', 'w', '3', '.', 'o', 'r', 'g', '/',
|
||||
'X', 'M', 'L', '/', '1', '9', '9', '8', '/',
|
||||
'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\0'
|
||||
ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH,
|
||||
ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD,
|
||||
ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_X, ASCII_M, ASCII_L,
|
||||
ASCII_SLASH, ASCII_1, ASCII_9, ASCII_9, ASCII_8, ASCII_SLASH,
|
||||
ASCII_n, ASCII_a, ASCII_m, ASCII_e, ASCII_s, ASCII_p, ASCII_a, ASCII_c,
|
||||
ASCII_e, '\0'
|
||||
};
|
||||
static const int xmlLen =
|
||||
(int)sizeof(xmlNamespace)/sizeof(XML_Char) - 1;
|
||||
static const XML_Char xmlnsNamespace[] = {
|
||||
'h', 't', 't', 'p', ':', '/', '/',
|
||||
'w', 'w', 'w', '.', 'w', '3', '.', 'o', 'r', 'g', '/',
|
||||
'2', '0', '0', '0', '/', 'x', 'm', 'l', 'n', 's', '/', '\0'
|
||||
ASCII_h, ASCII_t, ASCII_t, ASCII_p, ASCII_COLON, ASCII_SLASH, ASCII_SLASH,
|
||||
ASCII_w, ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w, ASCII_3, ASCII_PERIOD,
|
||||
ASCII_o, ASCII_r, ASCII_g, ASCII_SLASH, ASCII_2, ASCII_0, ASCII_0,
|
||||
ASCII_0, ASCII_SLASH, ASCII_x, ASCII_m, ASCII_l, ASCII_n, ASCII_s,
|
||||
ASCII_SLASH, '\0'
|
||||
};
|
||||
static const int xmlnsLen =
|
||||
(int)sizeof(xmlnsNamespace)/sizeof(XML_Char) - 1;
|
||||
|
@ -2971,13 +2978,13 @@ addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId,
|
|||
return XML_ERROR_UNDECLARING_PREFIX;
|
||||
|
||||
if (prefix->name
|
||||
&& prefix->name[0] == XML_T('x')
|
||||
&& prefix->name[1] == XML_T('m')
|
||||
&& prefix->name[2] == XML_T('l')) {
|
||||
&& prefix->name[0] == XML_T(ASCII_x)
|
||||
&& prefix->name[1] == XML_T(ASCII_m)
|
||||
&& prefix->name[2] == XML_T(ASCII_l)) {
|
||||
|
||||
/* Not allowed to bind xmlns */
|
||||
if (prefix->name[3] == XML_T('n')
|
||||
&& prefix->name[4] == XML_T('s')
|
||||
if (prefix->name[3] == XML_T(ASCII_n)
|
||||
&& prefix->name[4] == XML_T(ASCII_s)
|
||||
&& prefix->name[5] == XML_T('\0'))
|
||||
return XML_ERROR_RESERVED_PREFIX_XMLNS;
|
||||
|
||||
|
@ -3640,23 +3647,27 @@ doProlog(XML_Parser parser,
|
|||
XML_Bool haveMore)
|
||||
{
|
||||
#ifdef XML_DTD
|
||||
static const XML_Char externalSubsetName[] = { '#' , '\0' };
|
||||
static const XML_Char externalSubsetName[] = { ASCII_HASH , '\0' };
|
||||
#endif /* XML_DTD */
|
||||
static const XML_Char atypeCDATA[] = { 'C', 'D', 'A', 'T', 'A', '\0' };
|
||||
static const XML_Char atypeID[] = { 'I', 'D', '\0' };
|
||||
static const XML_Char atypeIDREF[] = { 'I', 'D', 'R', 'E', 'F', '\0' };
|
||||
static const XML_Char atypeIDREFS[] = { 'I', 'D', 'R', 'E', 'F', 'S', '\0' };
|
||||
static const XML_Char atypeENTITY[] = { 'E', 'N', 'T', 'I', 'T', 'Y', '\0' };
|
||||
static const XML_Char atypeENTITIES[] =
|
||||
{ 'E', 'N', 'T', 'I', 'T', 'I', 'E', 'S', '\0' };
|
||||
static const XML_Char atypeCDATA[] =
|
||||
{ ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' };
|
||||
static const XML_Char atypeID[] = { ASCII_I, ASCII_D, '\0' };
|
||||
static const XML_Char atypeIDREF[] =
|
||||
{ ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' };
|
||||
static const XML_Char atypeIDREFS[] =
|
||||
{ ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' };
|
||||
static const XML_Char atypeENTITY[] =
|
||||
{ ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' };
|
||||
static const XML_Char atypeENTITIES[] = { ASCII_E, ASCII_N,
|
||||
ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, '\0' };
|
||||
static const XML_Char atypeNMTOKEN[] = {
|
||||
'N', 'M', 'T', 'O', 'K', 'E', 'N', '\0' };
|
||||
static const XML_Char atypeNMTOKENS[] = {
|
||||
'N', 'M', 'T', 'O', 'K', 'E', 'N', 'S', '\0' };
|
||||
static const XML_Char notationPrefix[] = {
|
||||
'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', '(', '\0' };
|
||||
static const XML_Char enumValueSep[] = { '|', '\0' };
|
||||
static const XML_Char enumValueStart[] = { '(', '\0' };
|
||||
ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' };
|
||||
static const XML_Char atypeNMTOKENS[] = { ASCII_N, ASCII_M, ASCII_T,
|
||||
ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, '\0' };
|
||||
static const XML_Char notationPrefix[] = { ASCII_N, ASCII_O, ASCII_T,
|
||||
ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0' };
|
||||
static const XML_Char enumValueSep[] = { ASCII_PIPE, '\0' };
|
||||
static const XML_Char enumValueStart[] = { ASCII_LPAREN, '\0' };
|
||||
|
||||
/* save one level of indirection */
|
||||
DTD * const dtd = _dtd;
|
||||
|
@ -3962,11 +3973,11 @@ doProlog(XML_Parser parser,
|
|||
0, parser))
|
||||
return XML_ERROR_NO_MEMORY;
|
||||
if (attlistDeclHandler && declAttributeType) {
|
||||
if (*declAttributeType == XML_T('(')
|
||||
|| (*declAttributeType == XML_T('N')
|
||||
&& declAttributeType[1] == XML_T('O'))) {
|
||||
if (*declAttributeType == XML_T(ASCII_LPAREN)
|
||||
|| (*declAttributeType == XML_T(ASCII_N)
|
||||
&& declAttributeType[1] == XML_T(ASCII_O))) {
|
||||
/* Enumerated or Notation type */
|
||||
if (!poolAppendChar(&tempPool, XML_T(')'))
|
||||
if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN))
|
||||
|| !poolAppendChar(&tempPool, XML_T('\0')))
|
||||
return XML_ERROR_NO_MEMORY;
|
||||
declAttributeType = tempPool.start;
|
||||
|
@ -3999,11 +4010,11 @@ doProlog(XML_Parser parser,
|
|||
declAttributeIsCdata, XML_FALSE, attVal, parser))
|
||||
return XML_ERROR_NO_MEMORY;
|
||||
if (attlistDeclHandler && declAttributeType) {
|
||||
if (*declAttributeType == XML_T('(')
|
||||
|| (*declAttributeType == XML_T('N')
|
||||
&& declAttributeType[1] == XML_T('O'))) {
|
||||
if (*declAttributeType == XML_T(ASCII_LPAREN)
|
||||
|| (*declAttributeType == XML_T(ASCII_N)
|
||||
&& declAttributeType[1] == XML_T(ASCII_O))) {
|
||||
/* Enumerated or Notation type */
|
||||
if (!poolAppendChar(&tempPool, XML_T(')'))
|
||||
if (!poolAppendChar(&tempPool, XML_T(ASCII_RPAREN))
|
||||
|| !poolAppendChar(&tempPool, XML_T('\0')))
|
||||
return XML_ERROR_NO_MEMORY;
|
||||
declAttributeType = tempPool.start;
|
||||
|
@ -4330,14 +4341,14 @@ doProlog(XML_Parser parser,
|
|||
}
|
||||
break;
|
||||
case XML_ROLE_GROUP_SEQUENCE:
|
||||
if (groupConnector[prologState.level] == '|')
|
||||
if (groupConnector[prologState.level] == ASCII_PIPE)
|
||||
return XML_ERROR_SYNTAX;
|
||||
groupConnector[prologState.level] = ',';
|
||||
groupConnector[prologState.level] = ASCII_COMMA;
|
||||
if (dtd->in_eldecl && elementDeclHandler)
|
||||
handleDefault = XML_FALSE;
|
||||
break;
|
||||
case XML_ROLE_GROUP_CHOICE:
|
||||
if (groupConnector[prologState.level] == ',')
|
||||
if (groupConnector[prologState.level] == ASCII_COMMA)
|
||||
return XML_ERROR_SYNTAX;
|
||||
if (dtd->in_eldecl
|
||||
&& !groupConnector[prologState.level]
|
||||
|
@ -4349,7 +4360,7 @@ doProlog(XML_Parser parser,
|
|||
if (elementDeclHandler)
|
||||
handleDefault = XML_FALSE;
|
||||
}
|
||||
groupConnector[prologState.level] = '|';
|
||||
groupConnector[prologState.level] = ASCII_PIPE;
|
||||
break;
|
||||
case XML_ROLE_PARAM_ENTITY_REF:
|
||||
#ifdef XML_DTD
|
||||
|
@ -5279,7 +5290,7 @@ setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType)
|
|||
DTD * const dtd = _dtd; /* save one level of indirection */
|
||||
const XML_Char *name;
|
||||
for (name = elementType->name; *name; name++) {
|
||||
if (*name == XML_T(':')) {
|
||||
if (*name == XML_T(ASCII_COLON)) {
|
||||
PREFIX *prefix;
|
||||
const XML_Char *s;
|
||||
for (s = elementType->name; s != name; s++) {
|
||||
|
@ -5326,12 +5337,12 @@ getAttributeId(XML_Parser parser, const ENCODING *enc,
|
|||
poolFinish(&dtd->pool);
|
||||
if (!ns)
|
||||
;
|
||||
else if (name[0] == XML_T('x')
|
||||
&& name[1] == XML_T('m')
|
||||
&& name[2] == XML_T('l')
|
||||
&& name[3] == XML_T('n')
|
||||
&& name[4] == XML_T('s')
|
||||
&& (name[5] == XML_T('\0') || name[5] == XML_T(':'))) {
|
||||
else if (name[0] == XML_T(ASCII_x)
|
||||
&& name[1] == XML_T(ASCII_m)
|
||||
&& name[2] == XML_T(ASCII_l)
|
||||
&& name[3] == XML_T(ASCII_n)
|
||||
&& name[4] == XML_T(ASCII_s)
|
||||
&& (name[5] == XML_T('\0') || name[5] == XML_T(ASCII_COLON))) {
|
||||
if (name[5] == XML_T('\0'))
|
||||
id->prefix = &dtd->defaultPrefix;
|
||||
else
|
||||
|
@ -5342,7 +5353,7 @@ getAttributeId(XML_Parser parser, const ENCODING *enc,
|
|||
int i;
|
||||
for (i = 0; name[i]; i++) {
|
||||
/* attributes without prefix are *not* in the default namespace */
|
||||
if (name[i] == XML_T(':')) {
|
||||
if (name[i] == XML_T(ASCII_COLON)) {
|
||||
int j;
|
||||
for (j = 0; j < i; j++) {
|
||||
if (!poolAppendChar(&dtd->pool, name[j]))
|
||||
|
@ -5364,7 +5375,7 @@ getAttributeId(XML_Parser parser, const ENCODING *enc,
|
|||
return id;
|
||||
}
|
||||
|
||||
#define CONTEXT_SEP XML_T('\f')
|
||||
#define CONTEXT_SEP XML_T(ASCII_FF)
|
||||
|
||||
static const XML_Char *
|
||||
getContext(XML_Parser parser)
|
||||
|
@ -5376,7 +5387,7 @@ getContext(XML_Parser parser)
|
|||
if (dtd->defaultPrefix.binding) {
|
||||
int i;
|
||||
int len;
|
||||
if (!poolAppendChar(&tempPool, XML_T('=')))
|
||||
if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS)))
|
||||
return NULL;
|
||||
len = dtd->defaultPrefix.binding->uriLen;
|
||||
if (namespaceSeparator)
|
||||
|
@ -5402,7 +5413,7 @@ getContext(XML_Parser parser)
|
|||
for (s = prefix->name; *s; s++)
|
||||
if (!poolAppendChar(&tempPool, *s))
|
||||
return NULL;
|
||||
if (!poolAppendChar(&tempPool, XML_T('=')))
|
||||
if (!poolAppendChar(&tempPool, XML_T(ASCII_EQUALS)))
|
||||
return NULL;
|
||||
len = prefix->binding->uriLen;
|
||||
if (namespaceSeparator)
|
||||
|
@ -5454,7 +5465,7 @@ setContext(XML_Parser parser, const XML_Char *context)
|
|||
context = s;
|
||||
poolDiscard(&tempPool);
|
||||
}
|
||||
else if (*s == XML_T('=')) {
|
||||
else if (*s == XML_T(ASCII_EQUALS)) {
|
||||
PREFIX *prefix;
|
||||
if (poolLength(&tempPool) == 0)
|
||||
prefix = &dtd->defaultPrefix;
|
||||
|
|
Loading…
Add table
Reference in a new issue