util-byte: fix usage of util-byte integer parsers

Functions like ByteExtractStringUint8 return 0 or less on
failure. Many usages of this function treat 0 as successful as its our
common pattern.

Ticket: #7836
pull/13683/head
Jason Ish 12 months ago
parent 57e0ff0ee0
commit a1c5e93d45

@ -186,7 +186,7 @@ static InspectionBuffer *GetDNP3Data(DetectEngineThreadCtx *det_ctx,
*/
static int DetectDNP3FuncParseFunctionCode(const char *str, uint8_t *fc)
{
if (StringParseUint8(fc, 10, (uint16_t)strlen(str), str) >= 0) {
if (StringParseUint8(fc, 10, (uint16_t)strlen(str), str) > 0) {
return 1;
}
@ -335,11 +335,11 @@ static int DetectDNP3ObjParse(const char *str, uint8_t *group, uint8_t *var)
*sep = '\0';
varstr = sep + 1;
if (StringParseUint8(group, 0, (uint16_t)strlen(groupstr), groupstr) < 0) {
if (StringParseUint8(group, 0, (uint16_t)strlen(groupstr), groupstr) <= 0) {
return 0;
}
if (StringParseUint8(var, 0, (uint16_t)strlen(varstr), varstr) < 0) {
if (StringParseUint8(var, 0, (uint16_t)strlen(varstr), varstr) <= 0) {
return 0;
}

@ -279,7 +279,7 @@ static int IPOnlyCIDRItemParseSingle(IPOnlyCIDRItem **pdd, const char *str)
}
uint8_t cidr;
if (StringParseU8RangeCheck(&cidr, 10, 0, (const char *)mask, 0, 32) < 0)
if (StringParseU8RangeCheck(&cidr, 10, 0, (const char *)mask, 0, 32) <= 0)
goto error;
dd->netmask = cidr;

@ -319,8 +319,7 @@ static int DetectFastPatternSetup(DetectEngineCtx *de_ctx, Signature *s, const c
goto error;
}
uint16_t offset;
if (StringParseUint16(&offset, 10, 0,
(const char *)arg_substr) < 0) {
if (StringParseUint16(&offset, 10, 0, (const char *)arg_substr) <= 0) {
SCLogError("Invalid fast pattern offset:"
" \"%s\"",
arg_substr);
@ -335,8 +334,7 @@ static int DetectFastPatternSetup(DetectEngineCtx *de_ctx, Signature *s, const c
goto error;
}
uint16_t length;
if (StringParseUint16(&length, 10, 0,
(const char *)arg_substr) < 0) {
if (StringParseUint16(&length, 10, 0, (const char *)arg_substr) <= 0) {
SCLogError("Invalid value for fast "
"pattern: \"%s\"",
arg_substr);

@ -211,7 +211,7 @@ static int DetectHTTP2frametypeMatch(DetectEngineThreadCtx *det_ctx,
static int DetectHTTP2FuncParseFrameType(const char *str, uint8_t *ft)
{
// first parse numeric value
if (ByteExtractStringUint8(ft, 10, (uint16_t)strlen(str), str) >= 0) {
if (ByteExtractStringUint8(ft, 10, (uint16_t)strlen(str), str) > 0) {
return 1;
}
@ -291,7 +291,7 @@ static int DetectHTTP2errorcodeMatch(DetectEngineThreadCtx *det_ctx,
static int DetectHTTP2FuncParseErrorCode(const char *str, uint32_t *ec)
{
// first parse numeric value
if (ByteExtractStringUint32(ec, 10, (uint16_t)strlen(str), str) >= 0) {
if (ByteExtractStringUint32(ec, 10, (uint16_t)strlen(str), str) > 0) {
return 1;
}

@ -156,7 +156,7 @@ static DetectIdData *DetectIdParse (const char *idstr)
}
/* ok, fill the id data */
if (StringParseUint16(&temp, 10, 0, (const char *)tmp_str) < 0) {
if (StringParseUint16(&temp, 10, 0, (const char *)tmp_str) <= 0) {
SCLogError("invalid id option '%s'", tmp_str);
goto error;
}

@ -571,7 +571,7 @@ static uint8_t GetDnsLogVersion(SCConfNode *conf)
}
uint8_t version;
if (StringParseUint8(&version, 10, 0, version_string) >= 0) {
if (StringParseUint8(&version, 10, 0, version_string) > 0) {
return version;
}
SCLogWarning("Failed to parse EVE DNS log version of \"%s\"", version_string);

@ -298,10 +298,10 @@ static int SRepSplitLine(SRepCIDRTree *cidr_ctx, char *line, Address *ip, uint8_
return 1;
uint8_t c, v;
if (StringParseU8RangeCheck(&c, 10, 0, (const char *)ptrs[1], 0, SREP_MAX_CATS - 1) < 0)
if (StringParseU8RangeCheck(&c, 10, 0, (const char *)ptrs[1], 0, SREP_MAX_CATS - 1) <= 0)
return -1;
if (StringParseU8RangeCheck(&v, 10, 0, (const char *)ptrs[2], 0, SREP_MAX_VAL) < 0)
if (StringParseU8RangeCheck(&v, 10, 0, (const char *)ptrs[2], 0, SREP_MAX_VAL) <= 0)
return -1;
if (strchr(ptrs[0], '/') != NULL) {

@ -242,11 +242,11 @@ int BuildCpusetWithCallback(
stop = 1;
} else if (strchr(lnode->val, '-') != NULL) {
char *sep = strchr(lnode->val, '-');
if (StringParseUint32(&a, 10, sep - lnode->val, lnode->val) < 0) {
if (StringParseUint32(&a, 10, sep - lnode->val, lnode->val) <= 0) {
SCLogError("%s: invalid cpu range (start invalid): \"%s\"", name, lnode->val);
return -1;
}
if (StringParseUint32(&b, 10, strlen(sep) - 1, sep + 1) < 0) {
if (StringParseUint32(&b, 10, strlen(sep) - 1, sep + 1) <= 0) {
SCLogError("%s: invalid cpu range (end invalid): \"%s\"", name, lnode->val);
return -1;
}
@ -260,7 +260,7 @@ int BuildCpusetWithCallback(
return -1;
}
} else {
if (StringParseUint32(&a, 10, strlen(lnode->val), lnode->val) < 0) {
if (StringParseUint32(&a, 10, strlen(lnode->val), lnode->val) <= 0) {
SCLogError("%s: invalid cpu range (not an integer): \"%s\"", name, lnode->val);
return -1;
}

@ -140,6 +140,9 @@ int ByteExtractUint64(uint64_t *res, int e, uint16_t len, const uint8_t *bytes)
return ret;
}
/**
* \retval Greater than 0 if successful, 0 or negative on failure.
*/
int ByteExtractUint32(uint32_t *res, int e, uint16_t len, const uint8_t *bytes)
{
uint64_t i64;
@ -334,6 +337,9 @@ int StringParseUint32(uint32_t *res, int base, size_t len, const char *str)
return ret;
}
/**
* \retval Greater than 0 if successful, 0 or negative on failure.
*/
int StringParseUint16(uint16_t *res, int base, size_t len, const char *str)
{
uint64_t i64;
@ -358,6 +364,9 @@ int StringParseUint16(uint16_t *res, int base, size_t len, const char *str)
return ret;
}
/**
* \retval Greater than 0 if successful, 0 or negative on failure.
*/
int StringParseUint8(uint8_t *res, int base, size_t len, const char *str)
{
uint64_t i64;
@ -459,6 +468,9 @@ int StringParseU16RangeCheck(
return ret;
}
/**
* \retval Greater than 0 if successful, 0 or negative on failure.
*/
int StringParseU8RangeCheck(
uint8_t *res, int base, size_t len, const char *str, uint8_t min, uint8_t max)
{

@ -248,7 +248,7 @@ bool SCRadix4AddKeyIPV4String(
}
uint8_t cidr;
if (StringParseU8RangeCheck(&cidr, 10, 0, (const char *)mask_str, 0, 32) < 0) {
if (StringParseU8RangeCheck(&cidr, 10, 0, (const char *)mask_str, 0, 32) <= 0) {
sc_errno = SC_EINVAL;
return false;
}

@ -281,7 +281,7 @@ bool SCRadix6AddKeyIPV6String(
}
uint8_t cidr;
if (StringParseU8RangeCheck(&cidr, 10, 0, (const char *)mask_str, 0, 128) < 0) {
if (StringParseU8RangeCheck(&cidr, 10, 0, (const char *)mask_str, 0, 128) <= 0) {
sc_errno = SC_EINVAL;
return false;
}

Loading…
Cancel
Save