]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
signature: avoids overflow from VariableNameHash
authorPhilippe Antoine <contact@catenacyber.fr>
Thu, 1 Aug 2019 13:27:39 +0000 (15:27 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 20 Aug 2019 11:55:42 +0000 (13:55 +0200)
src/util-var-name.c

index 31923f2c405d59aeb8d7976ae1382cab5c2c9f31..3af35dc51e8ead442296ecd67d8a19deff57afae 100644 (file)
@@ -65,6 +65,9 @@ typedef struct VariableName_ {
     uint32_t idx;
 } VariableName;
 
+#define VARNAME_HASHSIZE 0x1000
+#define VARID_HASHSIZE 0x1000
+
 static uint32_t VariableNameHash(HashListTable *ht, void *buf, uint16_t buflen)
 {
      VariableName *fn = (VariableName *)buf;
@@ -75,7 +78,7 @@ static uint32_t VariableNameHash(HashListTable *ht, void *buf, uint16_t buflen)
          hash += fn->name[u];
      }
 
-     return hash;
+     return (hash % VARNAME_HASHSIZE);
 }
 
 static char VariableNameCompare(void *buf1, uint16_t len1, void *buf2, uint16_t len2)
@@ -96,7 +99,7 @@ static uint32_t VariableIdxHash(HashListTable *ht, void *buf, uint16_t buflen)
 {
     VariableName *fn = (VariableName *)buf;
     uint32_t hash = fn->idx + fn->type;
-    return hash;
+    return (hash % VARID_HASHSIZE);
 }
 
 static char VariableIdxCompare(void *buf1, uint16_t len1, void *buf2, uint16_t len2)
@@ -136,13 +139,13 @@ static VarNameStore *VarNameStoreInit(void)
     if (v == NULL)
         return NULL;
 
-    v->names = HashListTableInit(4096, VariableNameHash, VariableNameCompare, VariableNameFree);
+    v->names = HashListTableInit(VARNAME_HASHSIZE, VariableNameHash, VariableNameCompare, VariableNameFree);
     if (v->names == NULL) {
         SCFree(v);
         return NULL;
     }
 
-    v->ids = HashListTableInit(4096, VariableIdxHash, VariableIdxCompare, NULL);
+    v->ids = HashListTableInit(VARID_HASHSIZE, VariableIdxHash, VariableIdxCompare, NULL);
     if (v->ids == NULL) {
         HashListTableFree(v->names);
         SCFree(v);