shithub: riscv

Download patch

ref: b878450725de85dc874f42bc9de4ce1d5087f900
parent: 68571320fa2ba4f993199370d60dc4dbd114bea8
author: cinap_lenrek <[email protected]>
date: Wed Jun 1 14:31:21 EDT 2016

mk: remove buggy and unneeded syminit() function (thanks qurstuv)

syminit() attemts to reset the symbol table by freeing
all the hash table entries, tho the code is buggy having
a obviously use after free bug.

as syminit() is only called once in main when it does not
contain any symbols, the bug never occured.

removing the unneccesary code alltogether.

--- a/sys/src/cmd/mk/fns.h
+++ b/sys/src/cmd/mk/fns.h
@@ -65,7 +65,6 @@
 Word	*stow(char*);
 void	subst(char*, char*, char*, int);
 void	symdel(char*, int);
-void	syminit(void);
 Symtab	*symlook(char*, int, void*);
 void	symstat(void);
 void	symtraverse(int, void(*)(Symtab*));
--- a/sys/src/cmd/mk/main.c
+++ b/sys/src/cmd/mk/main.c
@@ -119,7 +119,6 @@
 	if(aflag)
 		iflag = 1;
 	usage();
-	syminit();
 	initenv();
 	usage();
 
--- a/sys/src/cmd/mk/symtab.c
+++ b/sys/src/cmd/mk/symtab.c
@@ -4,18 +4,6 @@
 #define	HASHMUL	79L	/* this is a good value */
 static Symtab *hash[NHASH];
 
-void
-syminit(void)
-{
-	Symtab **s, *ss;
-
-	for(s = hash; s < &hash[NHASH]; s++){
-		for(ss = *s; ss; ss = ss->next)
-			free((char *)ss);
-		*s = 0;
-	}
-}
-
 Symtab *
 symlook(char *sym, int space, void *install)
 {