diff --git a/include/private/parser.h b/include/private/parser.h index f9bf1692..a72465ed 100644 --- a/include/private/parser.h +++ b/include/private/parser.h @@ -1,6 +1,8 @@ #ifndef XML_PARSER_H_PRIVATE__ #define XML_PARSER_H_PRIVATE__ +#include + #include #include @@ -153,4 +155,20 @@ xmlExpandEntitiesInAttValue(xmlParserCtxt *ctxt, const xmlChar *str, XML_HIDDEN void xmlParserCheckEOF(xmlParserCtxt *ctxt, xmlParserErrors code); +static XML_INLINE void +xmlSaturatedAdd(unsigned long *dst, unsigned long val) { + if (val > ULONG_MAX - *dst) + *dst = ULONG_MAX; + else + *dst += val; +} + +static XML_INLINE void +xmlSaturatedAddSizeT(unsigned long *dst, size_t val) { + if (val > ULONG_MAX - *dst) + *dst = ULONG_MAX; + else + *dst += val; +} + #endif /* XML_PARSER_H_PRIVATE__ */ diff --git a/parser.c b/parser.c index 291a9c94..4968fc04 100644 --- a/parser.c +++ b/parser.c @@ -408,22 +408,6 @@ xmlNsWarn(xmlParserCtxtPtr ctxt, xmlParserErrors error, info1, info2, info3, 0, msg, info1, info2, info3); } -static void -xmlSaturatedAdd(unsigned long *dst, unsigned long val) { - if (val > ULONG_MAX - *dst) - *dst = ULONG_MAX; - else - *dst += val; -} - -static void -xmlSaturatedAddSizeT(unsigned long *dst, size_t val) { - if (val > ULONG_MAX - *dst) - *dst = ULONG_MAX; - else - *dst += val; -} - /** * Check for non-linear entity expansion behaviour. * diff --git a/parserInternals.c b/parserInternals.c index bd5a562d..51abd033 100644 --- a/parserInternals.c +++ b/parserInternals.c @@ -697,11 +697,7 @@ xmlParserShrink(xmlParserCtxt *ctxt) { if (res > 0) { used -= res; - if ((res > ULONG_MAX) || - (in->consumed > ULONG_MAX - (unsigned long)res)) - in->consumed = ULONG_MAX; - else - in->consumed += res; + xmlSaturatedAddSizeT(&in->consumed, res); } xmlBufUpdateInput(buf->buffer, in, used); @@ -732,11 +728,7 @@ xmlParserInputShrink(xmlParserInput *in) { ret = xmlBufShrink(in->buf->buffer, used - LINE_LEN); if (ret > 0) { used -= ret; - if ((ret > ULONG_MAX) || - (in->consumed > ULONG_MAX - (unsigned long)ret)) - in->consumed = ULONG_MAX; - else - in->consumed += ret; + xmlSaturatedAddSizeT(&in->consumed, ret); } xmlBufUpdateInput(in->buf->buffer, in, used);