From 421e8b4e6fc0f060164ce80fd49c422ad0c85b0e Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Thu, 8 Sep 2005 05:53:05 +0000 Subject: [PATCH] Bug-fix: Baja variables names cannot begin with a digit. If the crc32 of the ASCII value of a number happened to match the crc32 of a variable name, the code wouldn't run correctly. isvar() and newvar() are updated. --- src/sbbs3/baja.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/sbbs3/baja.c b/src/sbbs3/baja.c index 664a3d7bb6..226eccce7f 100644 --- a/src/sbbs3/baja.c +++ b/src/sbbs3/baja.c @@ -309,11 +309,17 @@ void cvttab(char *str) str[i]=' '; } -void newvar(uchar *in) +void newvar(uchar* src, uchar *in) { uchar name[128]; long i,l; + if(isdigit(*in)) { + printf("!SYNTAX ERROR (illegal variable name):\n"); + printf(linestr,src,line,(char*)in); + bail(1); + } + sprintf(name,"%.80s",in); if(strncmp(name,"var_",4)==0) /* decompiled source? */ l=strtoul(name+4,NULL,16); @@ -373,7 +379,7 @@ long isvar(uchar *arg) uchar name[128],*p; long i,l; - if(!arg || !(*arg)) + if(!arg || !(*arg) || isdigit(*arg)) return(0); sprintf(name,"%.80s",arg); @@ -550,7 +556,7 @@ void compile(char *src) for(p=arg;*p && *p!='#';) { sp=strchr(p,' '); if(sp) *sp=0; - newvar(p); + newvar(src,p); if(!sp) break; p=sp+1; @@ -855,7 +861,7 @@ void compile(char *src) if(sp) *sp=0; fputc(CS_VAR_INSTRUCTION,out); fputc(DEFINE_STR_VAR,out); - newvar(p); + newvar(src,p); writecrc(src,p); if(!sp) break; @@ -870,7 +876,7 @@ void compile(char *src) if(sp) *sp=0; fputc(CS_VAR_INSTRUCTION,out); fputc(DEFINE_INT_VAR,out); - newvar(p); + newvar(src,p); writecrc(src,p); if(!sp) break; @@ -885,7 +891,7 @@ void compile(char *src) if(sp) *sp=0; fputc(CS_VAR_INSTRUCTION,out); fputc(DEFINE_GLOBAL_STR_VAR,out); - newvar(p); + newvar(src,p); writecrc(src,p); if(!sp) break; @@ -900,7 +906,7 @@ void compile(char *src) if(sp) *sp=0; fputc(CS_VAR_INSTRUCTION,out); fputc(DEFINE_GLOBAL_INT_VAR,out); - newvar(p); + newvar(src,p); writecrc(src,p); if(!sp) break; -- GitLab