From: Shivani Bhardwaj Date: Wed, 17 Jun 2020 13:11:51 +0000 (+0530) Subject: util: check if parsed data is in range X-Git-Tag: suricata-6.0.0-beta1~326 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f2dbee4787e171f3cc1c9593f499f7a6501c29dc;p=thirdparty%2Fsuricata.git util: check if parsed data is in range --- diff --git a/src/util-byte.c b/src/util-byte.c index 8709e8789f..76ee47dc23 100644 --- a/src/util-byte.c +++ b/src/util-byte.c @@ -244,6 +244,9 @@ int ByteExtractStringUint32(uint32_t *res, int base, uint16_t len, const char *s if (ret <= 0) { return ret; } + if (i64 > UINT32_MAX) { + return -1; + } *res = (uint32_t)i64; @@ -264,6 +267,9 @@ int ByteExtractStringUint16(uint16_t *res, int base, uint16_t len, const char *s if (ret <= 0) { return ret; } + if (i64 > UINT16_MAX) { + return -1; + } *res = (uint16_t)i64; @@ -284,6 +290,9 @@ int ByteExtractStringUint8(uint8_t *res, int base, uint16_t len, const char *str if (ret <= 0) { return ret; } + if (i64 > UINT8_MAX) { + return -1; + } *res = (uint8_t)i64; @@ -309,6 +318,9 @@ int StringParseUint32(uint32_t *res, int base, uint16_t len, const char *str) if (ret <= 0) { return ret; } + if (i64 > UINT32_MAX) { + return -1; + } *res = (uint32_t)i64; @@ -329,6 +341,9 @@ int StringParseUint16(uint16_t *res, int base, uint16_t len, const char *str) if (ret <= 0) { return ret; } + if (i64 > UINT16_MAX) { + return -1; + } *res = (uint16_t)i64; @@ -349,6 +364,9 @@ int StringParseUint8(uint8_t *res, int base, uint16_t len, const char *str) if (ret <= 0) { return ret; } + if (i64 > UINT8_MAX) { + return -1; + } *res = (uint8_t)i64; @@ -389,6 +407,9 @@ int StringParseU32RangeCheck(uint32_t *res, int base, uint16_t len, const char * if (ret <= 0) { return ret; } + if (u64 > UINT32_MAX) { + return -1; + } *res = (uint32_t)u64; @@ -414,6 +435,9 @@ int StringParseU16RangeCheck(uint16_t *res, int base, uint16_t len, const char * if (ret <= 0) { return ret; } + if (u64 > UINT16_MAX) { + return -1; + } *res = (uint16_t)u64; @@ -439,6 +463,9 @@ int StringParseU8RangeCheck(uint8_t *res, int base, uint16_t len, const char *st if (ret <= 0) { return ret; } + if (u64 > UINT8_MAX) { + return -1; + } *res = (uint8_t)u64; @@ -515,6 +542,9 @@ int ByteExtractStringInt32(int32_t *res, int base, uint16_t len, const char *str if (ret <= 0) { return ret; } + if (i64 < INT32_MIN || i64 > INT32_MAX) { + return -1; + } *res = (int32_t)i64; @@ -536,6 +566,9 @@ int ByteExtractStringInt16(int16_t *res, int base, uint16_t len, const char *str if (ret <= 0) { return ret; } + if (i64 < INT16_MIN || i64 > INT16_MAX) { + return -1; + } *res = (int16_t)i64; @@ -557,6 +590,9 @@ int ByteExtractStringInt8(int8_t *res, int base, uint16_t len, const char *str) if (ret <= 0) { return ret; } + if (i64 < INT8_MIN || i64 > INT8_MAX) { + return -1; + } *res = (int8_t)i64; @@ -583,6 +619,9 @@ int StringParseInt32(int32_t *res, int base, uint16_t len, const char *str) if (ret <= 0) { return ret; } + if (i64 < INT32_MIN || i64 > INT32_MAX) { + return -1; + } *res = (int32_t)i64; @@ -604,6 +643,9 @@ int StringParseInt16(int16_t *res, int base, uint16_t len, const char *str) if (ret <= 0) { return ret; } + if (i64 < INT16_MIN || i64 > INT16_MAX) { + return -1; + } *res = (int16_t)i64; @@ -625,6 +667,9 @@ int StringParseInt8(int8_t *res, int base, uint16_t len, const char *str) if (ret <= 0) { return ret; } + if (i64 < INT8_MIN || i64 > INT8_MAX) { + return -1; + } *res = (int8_t)i64; @@ -666,6 +711,9 @@ int StringParseI32RangeCheck(int32_t *res, int base, uint16_t len, const char *s if (ret <= 0) { return ret; } + if (i64 < INT32_MIN || i64 > INT32_MAX) { + return -1; + } *res = (int32_t)i64; @@ -692,6 +740,9 @@ int StringParseI16RangeCheck(int16_t *res, int base, uint16_t len, const char *s if (ret <= 0) { return ret; } + if (i64 < INT16_MIN || i64 > INT16_MAX) { + return -1; + } *res = (int16_t)i64; @@ -718,6 +769,9 @@ int StringParseI8RangeCheck(int8_t *res, int base, uint16_t len, const char *str if (ret <= 0) { return ret; } + if (i64 < INT8_MIN || i64 > INT8_MAX) { + return -1; + } *res = (int8_t)i64;