]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
datasets: reputation value validation 4888/head
authorVictor Julien <victor@inliniac.net>
Mon, 27 Apr 2020 06:17:51 +0000 (08:17 +0200)
committerVictor Julien <victor@inliniac.net>
Mon, 27 Apr 2020 07:27:42 +0000 (09:27 +0200)
src/datasets.c

index 68557f3a4211e860a330c6ec4de5103e4109695d..46f39d1926fac73c216fbaaf7e3aa6b14e037850 100644 (file)
@@ -32,6 +32,7 @@
 #include "util-print.h"
 #include "util-crypt.h"     // encode base64
 #include "util-base64.h"    // decode base64
+#include "util-byte.h"
 
 SCMutex sets_lock = SCMUTEX_INITIALIZER;
 static Dataset *sets = NULL;
@@ -138,12 +139,14 @@ static int ParseRepLine(const char *in, size_t ins, DataRepType *rep_out)
         return -1;
     }
 
-    int v = atoi(ptrs[0]);
-    if (v < 0 || v > USHRT_MAX) {
-        SCLogDebug("v %d", v);
+    uint16_t v = 0;
+    int r = StringParseU16RangeCheck(&v, 10, strlen(ptrs[0]), ptrs[0], 0, USHRT_MAX);
+    if (r != (int)strlen(ptrs[0])) {
+        SCLogError(SC_ERR_INVALID_NUMERIC_VALUE,
+                "'%s' is not a valid reputation value (0-65535)", ptrs[0]);
         return -1;
     }
-    SCLogDebug("v %d raw %s", v, ptrs[0]);
+    SCLogDebug("v %"PRIu16" raw %s", v, ptrs[0]);
 
     rep_out->value = v;
     return 0;