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