|
|
@@ -0,0 +1,350 @@ |
|
|
From 9982ce0749bf98b0d464b2c11199b87233c47e6e Mon Sep 17 00:00:00 2001 |
|
|
From: Jerome Duval <jerome.duval@gmail.com> |
|
|
Date: Mon, 24 May 2021 20:59:30 +0200 |
|
|
Subject: gcc2 build fix |
|
|
|
|
|
|
|
|
diff --git a/examples/elements.c b/examples/elements.c |
|
|
index e5fb850..bf227b5 100644 |
|
|
--- a/examples/elements.c |
|
|
+++ b/examples/elements.c |
|
|
@@ -96,6 +96,7 @@ main(void) { |
|
|
return 1; |
|
|
} |
|
|
|
|
|
+{ |
|
|
const size_t len = fread(buf, 1, BUFSIZ, stdin); |
|
|
|
|
|
if (ferror(stdin)) { |
|
|
@@ -114,6 +115,7 @@ main(void) { |
|
|
XML_ParserFree(parser); |
|
|
return 1; |
|
|
} |
|
|
+} |
|
|
} while (! done); |
|
|
|
|
|
XML_ParserFree(parser); |
|
|
diff --git a/examples/outline.c b/examples/outline.c |
|
|
index d2df914..641ffc1 100644 |
|
|
--- a/examples/outline.c |
|
|
+++ b/examples/outline.c |
|
|
@@ -99,6 +99,7 @@ main(void) { |
|
|
return 1; |
|
|
} |
|
|
|
|
|
+{ |
|
|
const size_t len = fread(buf, 1, BUFSIZ, stdin); |
|
|
|
|
|
if (ferror(stdin)) { |
|
|
@@ -117,6 +118,7 @@ main(void) { |
|
|
XML_ParserFree(parser); |
|
|
return 1; |
|
|
} |
|
|
+} |
|
|
} while (! done); |
|
|
|
|
|
XML_ParserFree(parser); |
|
|
diff --git a/lib/xmlparse.c b/lib/xmlparse.c |
|
|
index b6c2eca..e8eec94 100644 |
|
|
--- a/lib/xmlparse.c |
|
|
+++ b/lib/xmlparse.c |
|
|
@@ -720,7 +720,8 @@ XML_ParserCreate(const XML_Char *encodingName) { |
|
|
|
|
|
XML_Parser XMLCALL |
|
|
XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) { |
|
|
- XML_Char tmp[2] = {nsSep, 0}; |
|
|
+ XML_Char tmp[2] = {0, 0}; |
|
|
+ tmp[0] = nsSep; |
|
|
return XML_ParserCreate_MM(encodingName, NULL, tmp); |
|
|
} |
|
|
|
|
|
@@ -1354,7 +1355,8 @@ XML_ExternalEntityParserCreate(XML_Parser oldParser, const XML_Char *context, |
|
|
would be otherwise. |
|
|
*/ |
|
|
if (parser->m_ns) { |
|
|
- XML_Char tmp[2] = {parser->m_namespaceSeparator, 0}; |
|
|
+ XML_Char tmp[2] = {0, 0}; |
|
|
+ tmp[0] = parser->m_namespaceSeparator; |
|
|
parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); |
|
|
} else { |
|
|
parser = parserCreate(encodingName, &parser->m_mem, NULL, newDtd); |
|
|
@@ -3475,7 +3477,7 @@ storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, |
|
|
if (parser->m_nsAttsPower >= sizeof(unsigned int) * 8 /* bits per byte */) { |
|
|
return XML_ERROR_NO_MEMORY; |
|
|
} |
|
|
- |
|
|
+{ |
|
|
unsigned int nsAttsSize = 1u << parser->m_nsAttsPower; |
|
|
unsigned char oldNsAttsPower = parser->m_nsAttsPower; |
|
|
/* size of hash table must be at least 2 * (# of prefixed attributes) */ |
|
|
@@ -3632,6 +3634,7 @@ storeAtts(XML_Parser parser, const ENCODING *enc, const char *attStr, |
|
|
} else /* not prefixed */ |
|
|
((XML_Char *)s)[-1] = 0; /* clear flag */ |
|
|
} |
|
|
+ } |
|
|
} |
|
|
/* clear flags for the remaining attributes */ |
|
|
for (; i < attIndex; i += 2) |
|
|
@@ -3936,13 +3939,14 @@ addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, |
|
|
return XML_ERROR_NO_MEMORY; |
|
|
} |
|
|
#endif |
|
|
- |
|
|
+{ |
|
|
XML_Char *temp = (XML_Char *)REALLOC( |
|
|
parser, b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE)); |
|
|
if (temp == NULL) |
|
|
return XML_ERROR_NO_MEMORY; |
|
|
b->uri = temp; |
|
|
b->uriAlloc = len + EXPAND_SPARE; |
|
|
+} |
|
|
} |
|
|
parser->m_freeBindingList = b->nextTagBinding; |
|
|
} else { |
|
|
@@ -5294,7 +5298,7 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, |
|
|
if (parser->m_groupSize > (unsigned int)(-1) / 2u) { |
|
|
return XML_ERROR_NO_MEMORY; |
|
|
} |
|
|
- |
|
|
+{ |
|
|
char *const new_connector = (char *)REALLOC( |
|
|
parser, parser->m_groupConnector, parser->m_groupSize *= 2); |
|
|
if (new_connector == NULL) { |
|
|
@@ -5302,6 +5306,7 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, |
|
|
return XML_ERROR_NO_MEMORY; |
|
|
} |
|
|
parser->m_groupConnector = new_connector; |
|
|
+} |
|
|
} |
|
|
|
|
|
if (dtd->scaffIndex) { |
|
|
@@ -5314,12 +5319,13 @@ doProlog(XML_Parser parser, const ENCODING *enc, const char *s, const char *end, |
|
|
return XML_ERROR_NO_MEMORY; |
|
|
} |
|
|
#endif |
|
|
- |
|
|
+{ |
|
|
int *const new_scaff_index = (int *)REALLOC( |
|
|
parser, dtd->scaffIndex, parser->m_groupSize * sizeof(int)); |
|
|
if (new_scaff_index == NULL) |
|
|
return XML_ERROR_NO_MEMORY; |
|
|
dtd->scaffIndex = new_scaff_index; |
|
|
+} |
|
|
} |
|
|
} else { |
|
|
parser->m_groupConnector |
|
|
@@ -6409,7 +6415,7 @@ defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata, |
|
|
if (type->allocDefaultAtts > INT_MAX / 2) { |
|
|
return 0; |
|
|
} |
|
|
- |
|
|
+{ |
|
|
int count = type->allocDefaultAtts * 2; |
|
|
|
|
|
/* Detect and prevent integer overflow. |
|
|
@@ -6428,7 +6434,8 @@ defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata, |
|
|
return 0; |
|
|
type->allocDefaultAtts = count; |
|
|
type->defaultAtts = temp; |
|
|
- } |
|
|
+} |
|
|
+ } |
|
|
} |
|
|
att = type->defaultAtts + type->nDefaultAtts; |
|
|
att->id = attId; |
|
|
@@ -7077,7 +7084,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) { |
|
|
if (newPower >= sizeof(unsigned long) * 8 /* bits per byte */) { |
|
|
return NULL; |
|
|
} |
|
|
- |
|
|
+{ |
|
|
size_t newSize = (size_t)1 << newPower; |
|
|
unsigned long newMask = (unsigned long)newSize - 1; |
|
|
|
|
|
@@ -7086,6 +7093,7 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) { |
|
|
return NULL; |
|
|
} |
|
|
|
|
|
+{ |
|
|
size_t tsize = newSize * sizeof(NAMED *); |
|
|
NAMED **newV = table->mem->malloc_fcn(tsize); |
|
|
if (! newV) |
|
|
@@ -7115,6 +7123,8 @@ lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) { |
|
|
i < step ? (i += newSize - step) : (i -= step); |
|
|
} |
|
|
} |
|
|
+} |
|
|
+ } |
|
|
} |
|
|
table->v[i] = table->mem->malloc_fcn(createSize); |
|
|
if (! table->v[i]) |
|
|
@@ -7506,11 +7516,12 @@ build_model(XML_Parser parser) { |
|
|
> (size_t)(-1) - dtd->contentStringLen * sizeof(XML_Char)) { |
|
|
return NULL; |
|
|
} |
|
|
- |
|
|
+{ |
|
|
const size_t allocsize = (dtd->scaffCount * sizeof(XML_Content) |
|
|
+ (dtd->contentStringLen * sizeof(XML_Char))); |
|
|
|
|
|
ret = (XML_Content *)MALLOC(parser, allocsize); |
|
|
+} |
|
|
if (! ret) |
|
|
return NULL; |
|
|
|
|
|
@@ -7563,6 +7574,7 @@ build_model(XML_Parser parser) { |
|
|
* |
|
|
* - The algorithm repeats until all target array indices have been processed. |
|
|
*/ |
|
|
+{ |
|
|
XML_Content *dest = ret; /* tree node writing location, moves upwards */ |
|
|
XML_Content *const destLimit = &ret[dtd->scaffCount]; |
|
|
XML_Content *jobDest = ret; /* next free writing location in target array */ |
|
|
@@ -7603,7 +7615,7 @@ build_model(XML_Parser parser) { |
|
|
(jobDest++)->numchildren = (unsigned int)cn; |
|
|
} |
|
|
} |
|
|
- |
|
|
+} |
|
|
return ret; |
|
|
} |
|
|
|
|
|
@@ -7675,7 +7687,7 @@ accountingReportStats(XML_Parser originParser, const char *epilog) { |
|
|
if (rootParser->m_accounting.debugLevel < 1) { |
|
|
return; |
|
|
} |
|
|
- |
|
|
+{ |
|
|
const float amplificationFactor |
|
|
= accountingGetCurrentAmplification(rootParser); |
|
|
fprintf(stderr, |
|
|
@@ -7685,6 +7697,7 @@ accountingReportStats(XML_Parser originParser, const char *epilog) { |
|
|
rootParser->m_accounting.countBytesIndirect, |
|
|
(double)amplificationFactor, epilog); |
|
|
} |
|
|
+} |
|
|
|
|
|
static void |
|
|
accountingOnAbort(XML_Parser originParser) { |
|
|
@@ -7703,6 +7716,7 @@ accountingReportDiff(XML_Parser rootParser, |
|
|
bytesMore, (account == XML_ACCOUNT_DIRECT) ? "DIR" : "EXP", |
|
|
levelsAwayFromRootParser, source_line, 10, ""); |
|
|
|
|
|
+{ |
|
|
const char ellipis[] = "[..]"; |
|
|
const size_t ellipsisLength = sizeof(ellipis) /* because compile-time */ - 1; |
|
|
const unsigned int contextLength = 10; |
|
|
@@ -7727,6 +7741,7 @@ accountingReportDiff(XML_Parser rootParser, |
|
|
} |
|
|
fprintf(stderr, "\"\n"); |
|
|
} |
|
|
+} |
|
|
|
|
|
static XML_Bool |
|
|
accountingDiffTolerated(XML_Parser originParser, int tok, const char *before, |
|
|
@@ -7745,12 +7760,13 @@ accountingDiffTolerated(XML_Parser originParser, int tok, const char *before, |
|
|
|
|
|
if (account == XML_ACCOUNT_NONE) |
|
|
return XML_TRUE; /* because these bytes have been accounted for, already */ |
|
|
- |
|
|
+{ |
|
|
unsigned int levelsAwayFromRootParser; |
|
|
const XML_Parser rootParser |
|
|
= getRootParserOf(originParser, &levelsAwayFromRootParser); |
|
|
assert(! rootParser->m_parentParser); |
|
|
|
|
|
+{ |
|
|
const int isDirect |
|
|
= (account == XML_ACCOUNT_DIRECT) && (originParser == rootParser); |
|
|
const ptrdiff_t bytesMore = after - before; |
|
|
@@ -7763,7 +7779,7 @@ accountingDiffTolerated(XML_Parser originParser, int tok, const char *before, |
|
|
if (*additionTarget > (XmlBigCount)(-1) - (XmlBigCount)bytesMore) |
|
|
return XML_FALSE; |
|
|
*additionTarget += bytesMore; |
|
|
- |
|
|
+{ |
|
|
const XmlBigCount countBytesOutput |
|
|
= rootParser->m_accounting.countBytesDirect |
|
|
+ rootParser->m_accounting.countBytesIndirect; |
|
|
@@ -7782,6 +7798,9 @@ accountingDiffTolerated(XML_Parser originParser, int tok, const char *before, |
|
|
|
|
|
return tolerated; |
|
|
} |
|
|
+} |
|
|
+} |
|
|
+} |
|
|
|
|
|
unsigned long long |
|
|
testingAccountingGetCountBytesDirect(XML_Parser parser) { |
|
|
@@ -7804,6 +7823,7 @@ entityTrackingReportStats(XML_Parser rootParser, ENTITY *entity, |
|
|
if (rootParser->m_entity_stats.debugLevel < 1) |
|
|
return; |
|
|
|
|
|
+{ |
|
|
# if defined(XML_UNICODE) |
|
|
const char *const entityName = "[..]"; |
|
|
# else |
|
|
@@ -7820,6 +7840,7 @@ entityTrackingReportStats(XML_Parser rootParser, ENTITY *entity, |
|
|
entity->is_param ? "%" : "&", entityName, action, entity->textLen, |
|
|
sourceLine); |
|
|
} |
|
|
+} |
|
|
|
|
|
static void |
|
|
entityTrackingOnOpen(XML_Parser originParser, ENTITY *entity, int sourceLine) { |
|
|
@@ -8390,9 +8411,11 @@ getDebugLevel(const char *variableName, unsigned long defaultDebugLevel) { |
|
|
if (valueOrNull == NULL) { |
|
|
return defaultDebugLevel; |
|
|
} |
|
|
+{ |
|
|
const char *const value = valueOrNull; |
|
|
|
|
|
errno = 0; |
|
|
+{ |
|
|
char *afterValue = (char *)value; |
|
|
unsigned long debugLevel = strtoul(value, &afterValue, 10); |
|
|
if ((errno != 0) || (afterValue[0] != '\0')) { |
|
|
@@ -8402,3 +8425,5 @@ getDebugLevel(const char *variableName, unsigned long defaultDebugLevel) { |
|
|
|
|
|
return debugLevel; |
|
|
} |
|
|
+} |
|
|
+} |
|
|
diff --git a/xmlwf/xmlwf.c b/xmlwf/xmlwf.c |
|
|
index 471f2a2..6b8e7c5 100644 |
|
|
--- a/xmlwf/xmlwf.c |
|
|
+++ b/xmlwf/xmlwf.c |
|
|
@@ -1051,6 +1051,7 @@ tmain(int argc, XML_Char **argv) { |
|
|
XMLWF_SHIFT_ARG_INTO(valueText, argc, argv, i, j); |
|
|
|
|
|
errno = 0; |
|
|
+{ |
|
|
XML_Char *afterValueText = (XML_Char *)valueText; |
|
|
attackMaximumAmplification = tcstof(valueText, &afterValueText); |
|
|
if ((errno != 0) || (afterValueText[0] != T('\0')) |
|
|
@@ -1067,12 +1068,14 @@ tmain(int argc, XML_Char **argv) { |
|
|
", xmlwf has been compiled without DTD support.\n")); |
|
|
#endif |
|
|
break; |
|
|
+} |
|
|
} |
|
|
case T('b'): { |
|
|
const XML_Char *valueText = NULL; |
|
|
XMLWF_SHIFT_ARG_INTO(valueText, argc, argv, i, j); |
|
|
|
|
|
errno = 0; |
|
|
+{ |
|
|
XML_Char *afterValueText = (XML_Char *)valueText; |
|
|
attackThresholdBytes = tcstoull(valueText, &afterValueText, 10); |
|
|
if ((errno != 0) || (afterValueText[0] != T('\0'))) { |
|
|
@@ -1089,6 +1092,7 @@ tmain(int argc, XML_Char **argv) { |
|
|
#endif |
|
|
break; |
|
|
} |
|
|
+ } |
|
|
case T('\0'): |
|
|
if (j > 1) { |
|
|
i++; |
|
|
-- |
|
|
2.30.2 |
|
|
|