Crudely bounds check some naked fscanf("%s") parsing. Fixes #79, mostly.
authorDavid Given <dg@cowlark.com>
Sat, 2 Jun 2018 18:51:41 +0000 (20:51 +0200)
committerDavid Given <dg@cowlark.com>
Sat, 2 Jun 2018 18:51:41 +0000 (20:51 +0200)
util/ego/cs/cs_profit.c
util/ego/ra/makeitems.c
util/ego/ra/ra.c
util/ego/share/makecldef.c
util/ego/sp/sp.c
util/ego/sr/sr.c
util/ego/ud/ud.c
util/int/switch/mkiswitch.c
util/int/switch/mkswitch.c

index 2efabcb..801e343 100644 (file)
@@ -72,7 +72,7 @@ void cs_machinit(void *vp)
        /* Find piece that is relevant for this phase. */
        do {
                while (getc(f) != '\n');
-               fscanf(f, "%s", s);
+               fscanf(f, "%99s", s);
        } while (strcmp(s, "%%CS"));
 
        /* Choose a set of instructions which must only be eliminated
index bd9cf35..83f6703 100644 (file)
@@ -32,14 +32,14 @@ convert(mnemfile,itemfile)
        newcl = TRUE;
        printf("struct item_descr itemtab[] = {\n");
        for (;;) {
-               fscanf(mnemfile,"%s%s%d",def,mnem1,&opc);
+               fscanf(mnemfile,"%19s%19s%d",def,mnem1,&opc);
                /* read a line like "#define op_aar 1" */
                if (feof(mnemfile)) break;
                if (strcmp(def,"#define") != 0) {
                        error("bad mnemonic file, #define expected");
                }
                if (newcl) {
-                       fscanf(itemfile,"%s%s%d",mnem2,itemtype,&index);
+                       fscanf(itemfile,"%19s%19s%d",mnem2,itemtype,&index);
                        /* read a line like "op_loc CONST 4" */
                }
                if (feof(itemfile) || strcmp(mnem1,mnem2) != 0) {
index 643831f..0b1d5e4 100644 (file)
@@ -112,7 +112,7 @@ STATIC void ra_machinit(void *vp)
 
        for (;;) {
                while(getc(f) != '\n');
-               fscanf(f,"%s",s);
+               fscanf(f,"%99s",s);
                if (strcmp(s,"%%RA") == 0)break;
        }
        fscanf(f,"%hd",&regs_available[reg_any]);
index a89d305..2913e26 100644 (file)
@@ -37,14 +37,14 @@ convert(mnemfile,classfile)
        printf("\tNOCLASS,\tNOCLASS,\n");
        /* EM mnemonics start at 1, arrays in C at 0 */
        for (;;) {
-               fscanf(mnemfile,"%s%s%d",def,mnem1,&opc);
+               fscanf(mnemfile,"%9s%9s%d",def,mnem1,&opc);
                /* read a line like "#define op_aar 1" */
                if (feof(mnemfile)) break;
                if (strcmp(def,"#define") != 0) {
                        error("bad mnemonic file, #define expected");
                }
                if (newcl) {
-                       fscanf(classfile,"%s%d%d",mnem2,&src,&res);
+                       fscanf(classfile,"%9s%d%d",mnem2,&src,&res);
                        /* read a line like "op_loc 8 1" */
                }
                if (feof(classfile) || strcmp(mnem1,mnem2) != 0) {
index 051281d..0ba323a 100644 (file)
@@ -60,7 +60,7 @@ STATIC void sp_machinit(void *vp)
 
        for (;;) {
                while(getc(f) != '\n');
-               fscanf(f,"%s",s);
+               fscanf(f,"%99s",s);
                if (strcmp(s,"%%SP") == 0)break;
        }
        fscanf(f,"%d",&globl_sp_allowed);
index e933cb0..bdfedef 100644 (file)
@@ -61,7 +61,7 @@ void sr_machinit(void *vp)
 
        for (;;) {
                while(getc(f) != '\n');
-               fscanf(f,"%s",s);
+               fscanf(f,"%99s",s);
                if (strcmp(s,"%%SR") == 0)break;
        }
        fscanf(f,"%d",&ovfl_harmful);
index 0873371..6afcd5c 100644 (file)
@@ -64,7 +64,7 @@ STATIC void ud_machinit(void *vp)
 
        for (;;) {
                while(getc(f) != '\n');
-               fscanf(f,"%s",s);
+               fscanf(f,"%99s",s);
                if (strcmp(s,"%%UD") == 0)break;
        }
        globl_cond_tab = getcondtab(f);
index b9676d2..8be3d54 100644 (file)
@@ -52,7 +52,7 @@ main(argc, argv)
        }
 
        /* Start reading the input file */
-       while (fscanf(ifp, "%s %s", mnem, flgs) >= 0) {
+       while (fscanf(ifp, "%7s %7s", mnem, flgs) >= 0) {
                int i;
                char *p;
                char *base;
index 01446bd..2ada08a 100644 (file)
@@ -55,7 +55,7 @@ main(argc, argv)
        }
 
        /* Start reading the input file */
-       while (fscanf(ifp, "%s %s", mnem, flgs) >= 0) {
+       while (fscanf(ifp, "%7s %7s", mnem, flgs) >= 0) {
                int i;
                char *p;
                char *base;