aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNeven Sajko <nsajko@gmail.com>2020-01-14 04:05:03 +0100
committerRuss Cox <rsc@swtch.com>2020-01-13 22:05:03 -0500
commit26cae02da740b05da97868b517c58b05f0e37e07 (patch)
tree3b6bbfe0066e59012d73936b934d12f586483e43 /src
parent6bddb06b710066a4086dbe77822d02cafecb935b (diff)
downloadplan9port-26cae02da740b05da97868b517c58b05f0e37e07.tar.gz
plan9port-26cae02da740b05da97868b517c58b05f0e37e07.tar.bz2
plan9port-26cae02da740b05da97868b517c58b05f0e37e07.zip
mk: fix hash function (#315)
Avoid signed integer overflow using ulong instead of long h.
Diffstat (limited to 'src')
-rw-r--r--src/cmd/mk/symtab.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/src/cmd/mk/symtab.c b/src/cmd/mk/symtab.c
index 17674c43..2bb28ba8 100644
--- a/src/cmd/mk/symtab.c
+++ b/src/cmd/mk/symtab.c
@@ -1,7 +1,7 @@
#include "mk.h"
#define NHASH 4099
-#define HASHMUL 79L /* this is a good value */
+#define HASHMUL 79UL /* this is a good value */
static Symtab *hash[NHASH];
void
@@ -21,14 +21,12 @@ syminit(void)
Symtab *
symlook(char *sym, int space, void *install)
{
- long h;
+ ulong h;
char *p;
Symtab *s;
for(p = sym, h = space; *p; h += *p++)
h *= HASHMUL;
- if(h < 0)
- h = ~h;
h %= NHASH;
for(s = hash[h]; s; s = s->next)
if((s->space == space) && (strcmp(s->name, sym) == 0))
@@ -47,7 +45,7 @@ symlook(char *sym, int space, void *install)
void
symdel(char *sym, int space)
{
- long h;
+ ulong h;
char *p;
Symtab *s, *ls;
@@ -55,8 +53,6 @@ symdel(char *sym, int space)
for(p = sym, h = space; *p; h += *p++)
h *= HASHMUL;
- if(h < 0)
- h = ~h;
h %= NHASH;
for(s = hash[h], ls = 0; s; ls = s, s = s->next)
if((s->space == space) && (strcmp(s->name, sym) == 0)){