@@ -2426,11 +2426,11 @@ doContent(XML_Parser parser,
2426
2426
for (;;) {
2427
2427
int bufSize ;
2428
2428
int convLen ;
2429
- XmlConvert (enc ,
2429
+ const enum XML_Convert_Result convert_res = XmlConvert (enc ,
2430
2430
& fromPtr , rawNameEnd ,
2431
2431
(ICHAR * * )& toPtr , (ICHAR * )tag -> bufEnd - 1 );
2432
2432
convLen = (int )(toPtr - (XML_Char * )tag -> buf );
2433
- if (fromPtr == rawNameEnd ) {
2433
+ if (( convert_res == XML_CONVERT_COMPLETED ) || ( convert_res == XML_CONVERT_INPUT_INCOMPLETE ) ) {
2434
2434
tag -> name .strLen = convLen ;
2435
2435
break ;
2436
2436
}
@@ -2651,11 +2651,11 @@ doContent(XML_Parser parser,
2651
2651
if (MUST_CONVERT (enc , s )) {
2652
2652
for (;;) {
2653
2653
ICHAR * dataPtr = (ICHAR * )dataBuf ;
2654
- XmlConvert (enc , & s , next , & dataPtr , (ICHAR * )dataBufEnd );
2654
+ const enum XML_Convert_Result convert_res = XmlConvert (enc , & s , next , & dataPtr , (ICHAR * )dataBufEnd );
2655
2655
* eventEndPP = s ;
2656
2656
charDataHandler (handlerArg , dataBuf ,
2657
2657
(int )(dataPtr - (ICHAR * )dataBuf ));
2658
- if (s == next )
2658
+ if (( convert_res == XML_CONVERT_COMPLETED ) || ( convert_res == XML_CONVERT_INPUT_INCOMPLETE ) )
2659
2659
break ;
2660
2660
* eventPP = s ;
2661
2661
}
@@ -3261,11 +3261,11 @@ doCdataSection(XML_Parser parser,
3261
3261
if (MUST_CONVERT (enc , s )) {
3262
3262
for (;;) {
3263
3263
ICHAR * dataPtr = (ICHAR * )dataBuf ;
3264
- XmlConvert (enc , & s , next , & dataPtr , (ICHAR * )dataBufEnd );
3264
+ const enum XML_Convert_Result convert_res = XmlConvert (enc , & s , next , & dataPtr , (ICHAR * )dataBufEnd );
3265
3265
* eventEndPP = next ;
3266
3266
charDataHandler (handlerArg , dataBuf ,
3267
3267
(int )(dataPtr - (ICHAR * )dataBuf ));
3268
- if (s == next )
3268
+ if (( convert_res == XML_CONVERT_COMPLETED ) || ( convert_res == XML_CONVERT_INPUT_INCOMPLETE ) )
3269
3269
break ;
3270
3270
* eventPP = s ;
3271
3271
}
@@ -5342,6 +5342,7 @@ reportDefault(XML_Parser parser, const ENCODING *enc,
5342
5342
const char * s , const char * end )
5343
5343
{
5344
5344
if (MUST_CONVERT (enc , s )) {
5345
+ enum XML_Convert_Result convert_res ;
5345
5346
const char * * eventPP ;
5346
5347
const char * * eventEndPP ;
5347
5348
if (enc == encoding ) {
@@ -5354,11 +5355,11 @@ reportDefault(XML_Parser parser, const ENCODING *enc,
5354
5355
}
5355
5356
do {
5356
5357
ICHAR * dataPtr = (ICHAR * )dataBuf ;
5357
- XmlConvert (enc , & s , end , & dataPtr , (ICHAR * )dataBufEnd );
5358
+ convert_res = XmlConvert (enc , & s , end , & dataPtr , (ICHAR * )dataBufEnd );
5358
5359
* eventEndPP = s ;
5359
5360
defaultHandler (handlerArg , dataBuf , (int )(dataPtr - (ICHAR * )dataBuf ));
5360
5361
* eventPP = s ;
5361
- } while (s != end );
5362
+ } while (( convert_res != XML_CONVERT_COMPLETED ) && ( convert_res != XML_CONVERT_INPUT_INCOMPLETE ) );
5362
5363
}
5363
5364
else
5364
5365
defaultHandler (handlerArg , (XML_Char * )s , (int )((XML_Char * )end - (XML_Char * )s ));
@@ -6163,8 +6164,8 @@ poolAppend(STRING_POOL *pool, const ENCODING *enc,
6163
6164
if (!pool -> ptr && !poolGrow (pool ))
6164
6165
return NULL ;
6165
6166
for (;;) {
6166
- XmlConvert (enc , & ptr , end , (ICHAR * * )& (pool -> ptr ), (ICHAR * )pool -> end );
6167
- if (ptr == end )
6167
+ const enum XML_Convert_Result convert_res = XmlConvert (enc , & ptr , end , (ICHAR * * )& (pool -> ptr ), (ICHAR * )pool -> end );
6168
+ if (( convert_res == XML_CONVERT_COMPLETED ) || ( convert_res == XML_CONVERT_INPUT_INCOMPLETE ) )
6168
6169
break ;
6169
6170
if (!poolGrow (pool ))
6170
6171
return NULL ;
@@ -6248,8 +6249,13 @@ poolGrow(STRING_POOL *pool)
6248
6249
}
6249
6250
}
6250
6251
if (pool -> blocks && pool -> start == pool -> blocks -> s ) {
6252
+ BLOCK * temp ;
6251
6253
int blockSize = (int )(pool -> end - pool -> start )* 2 ;
6252
- BLOCK * temp = (BLOCK * )
6254
+
6255
+ if (blockSize < 0 )
6256
+ return XML_FALSE ;
6257
+
6258
+ temp = (BLOCK * )
6253
6259
pool -> mem -> realloc_fcn (pool -> blocks ,
6254
6260
(offsetof(BLOCK , s )
6255
6261
+ blockSize * sizeof (XML_Char )));
@@ -6264,6 +6270,10 @@ poolGrow(STRING_POOL *pool)
6264
6270
else {
6265
6271
BLOCK * tem ;
6266
6272
int blockSize = (int )(pool -> end - pool -> start );
6273
+
6274
+ if (blockSize < 0 )
6275
+ return XML_FALSE ;
6276
+
6267
6277
if (blockSize < INIT_BLOCK_SIZE )
6268
6278
blockSize = INIT_BLOCK_SIZE ;
6269
6279
else
0 commit comments