Dropped max string size to 32k to eliminate buffer overflow in case dim section
This commit is contained in:
parent
a6df384fda
commit
51246e082e
100
mbc4.bas
100
mbc4.bas
@ -38,7 +38,7 @@
|
||||
'**********************************
|
||||
'** AUTO BUILD TRANSLATOR BINARY **
|
||||
'**********************************
|
||||
$EXECON
|
||||
$EXECON "-g"
|
||||
|
||||
|
||||
'**********************
|
||||
@ -108,8 +108,8 @@ This section is used to communicate to-do 's, changes, ideas, suggestions, etc.
|
||||
-------------------------------------------
|
||||
2022-07-26 Armando Rivera
|
||||
After a LONG time away....
|
||||
* Changed max size of szTmp$, Src$, and AbortSrc$ (65535)to avoid potential buffer overflows
|
||||
* Changed max size of WarnMsg$ (65536) to avoid potential buffer overflow
|
||||
* Changed max size of szTmp$, Src$, and AbortSrc$ (32768)to avoid potential buffer overflows
|
||||
* Changed max size of WarnMsg$ (32768) to avoid potential buffer overflow
|
||||
* Removed the "register" decorator from EOF function to comply with C++17 standard
|
||||
* The above addressed warnings thrown by C++17, which is the standard on modern Linux.
|
||||
* Removed cdecl/stdcall from "Declare Function" (dynamic linking), since cdecl is the standard on *nix systems
|
||||
@ -653,7 +653,7 @@ END TYPE
|
||||
'**************************************************************
|
||||
CONST VarTypes$ = "%$#!@¦"
|
||||
SET VarTypeLookup[] AS CHAR PTR
|
||||
"int", "int", "char *", "double", "float", "FILE *", "long double"
|
||||
"int", "char *", "double", "float", "FILE *", "long double"
|
||||
END SET
|
||||
'**************************************************************
|
||||
TYPE ARGTYPE
|
||||
@ -701,12 +701,12 @@ TYPE VARCODE
|
||||
VarNo AS INTEGER
|
||||
Method AS INTEGER
|
||||
IsPtrFlag AS INTEGER
|
||||
Header$
|
||||
Proto$
|
||||
Functype$
|
||||
StaticOut$
|
||||
Token$
|
||||
AsToken$
|
||||
Header AS STRING
|
||||
Proto AS STRING
|
||||
Functype AS STRING
|
||||
StaticOut AS STRING
|
||||
Token AS STRING
|
||||
AsToken AS STRING
|
||||
END TYPE
|
||||
|
||||
'*************************************************************************
|
||||
@ -1094,15 +1094,15 @@ END SET
|
||||
' CODE BEGINS
|
||||
'*************************************************************************
|
||||
FUNCTION main(ARGC AS INTEGER, ARGV AS PCHAR PTR)
|
||||
' ** AIR 2022/07/26 changed to 65535 from 2047+1 to avoid buffer overflow **
|
||||
GLOBAL szTmp$ * 65535 'This is a problem, cannot exceed 2047+1 or bad things *WILL* happen.
|
||||
GLOBAL Src$ * 65535 'This is a problem, cannot exceed 2047+1 or bad things *WILL* happen.
|
||||
GLOBAL AbortSrc$ * 65535 'This must be at least the size of Src$
|
||||
' ** AIR 2022/07/26 changed to 32768 from 2047+1 to avoid buffer overflow **
|
||||
GLOBAL szTmp$ * 32768 'This is a problem, cannot exceed 2047+1 or bad things *WILL* happen.
|
||||
GLOBAL Src$ * 32768 'This is a problem, cannot exceed 2047+1 or bad things *WILL* happen.
|
||||
GLOBAL AbortSrc$ * 32768 'This must be at least the size of Src$
|
||||
|
||||
' ** AIR 2022/07/26 changed to 65535 from 32767 to avoid buffer overflow **
|
||||
GLOBAL WarnMsg$ * 65535+1 'This must be MORE than the size of Src$
|
||||
' ** AIR 2022/07/26 changed to 32768 from 32767 to avoid buffer overflow **
|
||||
GLOBAL WarnMsg$ * 32768+1 'This must be MORE than the size of Src$
|
||||
|
||||
GLOBAL RmLibs$ * 32767 ' libraries to remove
|
||||
GLOBAL RmLibs$ * 32768 ' libraries to remove
|
||||
LOCAL bitz as INTEGER ' is OS 32/64 bit
|
||||
ProtoCnt = 0 ' Prototypes counter
|
||||
TranslateSlash = TRUE ' Default TO changing "\" TO "\\"
|
||||
@ -1130,10 +1130,10 @@ FUNCTION main(ARGC AS INTEGER, ARGV AS PCHAR PTR)
|
||||
|
||||
IF COMMAND$ = "" THEN
|
||||
!#if defined (__APPLE__)
|
||||
PRINT "MBC4: Ported to Mac OSX by Armando Rivera (c) 2009-2018"
|
||||
PRINT "MBC4: Ported to Mac OSX by Armando Rivera (c) 2009-2022"
|
||||
!#else
|
||||
PRINT "MBC4: Based on Linux BCX by Mike Henning (c) 2009"
|
||||
PRINT "(c) 2009-2018 Armando Rivera with additional code (c) 2009 John Jacques",LF$
|
||||
PRINT "(c) 2009-2022 Armando Rivera with additional code (c) 2009 John Jacques",LF$
|
||||
!#endif
|
||||
|
||||
PRINT "Version ", Version$, " Compiled with ";
|
||||
@ -1205,10 +1205,10 @@ FUNCTION main(ARGC AS INTEGER, ARGV AS PCHAR PTR)
|
||||
PRINT "MBC Version ", Version$
|
||||
!#if defined (__APPLE__)
|
||||
IsApple = TRUE
|
||||
PRINT "MBC4: Ported to Mac OSX by Armando Rivera (c) 2009-2018",LF$
|
||||
PRINT "MBC4: Ported to Mac OSX by Armando Rivera (c) 2009-2022",LF$
|
||||
!#else
|
||||
PRINT "MBC4: Based on Linux BCX by Mike Henning (c) 2009"
|
||||
PRINT "(c) 2009-2018 Armando Rivera with additional code (c) 2009 John Jacques",LF$
|
||||
PRINT "(c) 2009-2022 Armando Rivera with additional code (c) 2009 John Jacques",LF$
|
||||
!#endif
|
||||
|
||||
|
||||
@ -1739,7 +1739,7 @@ SUB ProcessSetCommand(GS)
|
||||
CONCAT (lszTmp$, Stk$[i])
|
||||
NEXT
|
||||
IF vt = vt_STRVAR AND lszTmp$ <> "" THEN
|
||||
CONCAT (lszTmp$, "[65535]")
|
||||
CONCAT (lszTmp$, "[32768]")
|
||||
END IF
|
||||
IF NOT InFunc THEN
|
||||
CALL AddGlobal(CVar$, vt, 0,lszTmp$,0,0,0,1)
|
||||
@ -1759,7 +1759,7 @@ SUB ProcessSetCommand(GS)
|
||||
DimType$ = REMOVE$(Tipe$,"*") ' *mh - 3/9/09
|
||||
GetTypeInfo(Tipe$, &IsPointer, &id, &vt)
|
||||
IF vt = vt_STRVAR THEN
|
||||
CONCAT(DimType$, "[65535]")
|
||||
CONCAT(DimType$, "[32768]")
|
||||
END IF
|
||||
IF NOT InFunc THEN
|
||||
CALL AddGlobal(CVar$, vt, id, DimType$,IsPointer,0,0,1)
|
||||
@ -1773,7 +1773,7 @@ SUB ProcessSetCommand(GS)
|
||||
i++
|
||||
IF Stk$[i]= "=" THEN j = 1
|
||||
IF SetString = vt_STRVAR AND j = 1 THEN
|
||||
FPRINT Outfile,"[65535]=";
|
||||
FPRINT Outfile,"[32768]=";
|
||||
ELSE
|
||||
FPRINT Outfile,Stk$[i];
|
||||
END IF
|
||||
@ -2481,7 +2481,7 @@ FUNCTION PrintWriteFormat$(DoWrite)
|
||||
DIM RAW Stak[128] AS ARGTYPE
|
||||
DIM RAW Frmat$
|
||||
DIM RAW Arg$
|
||||
DIM RAW ZZ$*65535
|
||||
DIM RAW ZZ$
|
||||
DIM RAW Cast$
|
||||
DIM RAW NewLineFlag = 0
|
||||
DIM RAW Argcount = 0
|
||||
@ -2651,7 +2651,7 @@ SUB EmitInputCode
|
||||
DIM RAW Frmat$
|
||||
DIM Stak$[128]
|
||||
DIM RAW Y$
|
||||
DIM RAW ZZ$*65535
|
||||
DIM RAW ZZ$*32768
|
||||
Use_Inputbuffer = TRUE
|
||||
Use_Scan = TRUE
|
||||
Use_Split = TRUE
|
||||
@ -2765,7 +2765,7 @@ SUB EmitFileInputCode
|
||||
DIM RAW Frmat$
|
||||
DIM RAW FHandle$
|
||||
DIM RAW Y$
|
||||
DIM RAW ZZ$*65535
|
||||
DIM RAW ZZ$*32768
|
||||
DIM Stak$[128]
|
||||
Arg$ = ""
|
||||
Frmat$ = ""
|
||||
@ -2857,14 +2857,14 @@ SUB EmitFileInputCode
|
||||
VarCnt++
|
||||
END SELECT
|
||||
NEXT
|
||||
FPRINT Outfile,Scoot$, "AR_fgets_retval=fgets(InputBuffer,65535," ; FHandle$ ; ");"
|
||||
FPRINT Outfile,Scoot$, "AR_fgets_retval=fgets(InputBuffer,32768," ; FHandle$ ; ");"
|
||||
FPRINT Outfile,Scoot$, "if(InputBuffer[strlen(InputBuffer)-1]== 10)"
|
||||
FPRINT Outfile,Scoot$, " InputBuffer[strlen(InputBuffer)-1]=0;"
|
||||
FPRINT Outfile,Scoot$, "ScanError = scan(InputBuffer," + ENC$(Frmat$) + Arg$ + ");\n"
|
||||
FPRINT Outfile,Scoot$, "*InputBuffer=0;"
|
||||
END SUB ' EmitFileInputCode
|
||||
SUB AddFuncs
|
||||
DIM RAW ZZ$*65535
|
||||
DIM RAW ZZ$*32768
|
||||
DIM RAW Last$
|
||||
Last$ = ""
|
||||
CALL CloseAll
|
||||
@ -6458,7 +6458,7 @@ SUB FuncSubDecs1(s$)
|
||||
ITERATE
|
||||
ELSE
|
||||
IF DataType(Stk$[i-1]) = vt_STRVAR THEN
|
||||
Stk$[i-1] = Stk$[i-1] + "[][65535]"
|
||||
Stk$[i-1] = Stk$[i-1] + "[][32768]"
|
||||
END IF
|
||||
Stk$[i-1] = "*" + Stk$[i-1]
|
||||
END IF
|
||||
@ -6656,7 +6656,7 @@ SUB HandleNonsense
|
||||
NEXT
|
||||
END SUB ' HandleNonsense
|
||||
SUB ValidVar(v$)
|
||||
DIM RAW ZZ$*65535
|
||||
DIM RAW ZZ$*32768
|
||||
IF NOT isalpha(*v$) AND *v$ <> ASC("_") THEN
|
||||
IF NOT iMatchLft(v$, "(*") THEN ' Allow byref format (*A).xxx
|
||||
Abort("Invalid String Variable Name")
|
||||
@ -6813,7 +6813,7 @@ SUB Emit
|
||||
DIM RAW Keyword$
|
||||
DIM RAW lszTmp$
|
||||
DIM RAW Var1$
|
||||
DIM RAW ZZ$*65535
|
||||
DIM RAW ZZ$*32768
|
||||
DIM RAW IsSubOrFuncPtr
|
||||
DIM RAW dms
|
||||
STATIC NoBreak
|
||||
@ -7910,7 +7910,7 @@ SUB Emit
|
||||
IF i = vt_STRLIT OR i = vt_STRVAR THEN
|
||||
IF i <> vt_STRLIT THEN Stk$[2] = Clean$(Stk$[2])
|
||||
FPRINT Outfile,Scoot$,"printf(", ENC$("%s"), ",", Stk$[2], ");"
|
||||
FPRINT Outfile,Scoot$,"AR_fgets_retval=fgets(", Clean$(Stk$[3]), ",65535,stdin);"
|
||||
FPRINT Outfile,Scoot$,"AR_fgets_retval=fgets(", Clean$(Stk$[3]), ",32768,stdin);"
|
||||
FPRINT Outfile,Scoot$,Clean$(Stk$[3]),"[strlen(",Clean$(Stk$[3]),")-1]=0;"
|
||||
EXIT SELECT
|
||||
END IF
|
||||
@ -7949,7 +7949,7 @@ SUB Emit
|
||||
END IF
|
||||
END IF
|
||||
FPRINT Outfile,Scoot$, Var$ ; "[0]=0;"
|
||||
FPRINT Outfile,Scoot$, "AR_fgets_retval=fgets(" ; Var$ ; ",65535,"; Clean$(Stk$[2]) ; ");"
|
||||
FPRINT Outfile,Scoot$, "AR_fgets_retval=fgets(" ; Var$ ; ",32768,"; Clean$(Stk$[2]) ; ");"
|
||||
FPRINT Outfile,Scoot$, "if(" ; CVar$ ; "[strlen(" ;CVar$ ; ")-1]==10)";
|
||||
FPRINT Outfile,CVar$ ; "[strlen(" ; CVar$ ; ")-1]=0;"
|
||||
IF Var1$ <> "" THEN
|
||||
@ -8655,7 +8655,7 @@ SUB Emit
|
||||
END IF
|
||||
END IF
|
||||
dms++
|
||||
CONCAT(ZZ$,",65535")
|
||||
CONCAT(ZZ$,",32768")
|
||||
END IF
|
||||
IF InTypeDef THEN
|
||||
IF vt = vt_STRUCT THEN
|
||||
@ -8756,7 +8756,7 @@ SUB Emit
|
||||
IF iMatchWrd(Stk$[Ndx], "string") THEN
|
||||
Ndx--
|
||||
Stk$[Ndx] = "["
|
||||
Stk$[++Ndx] = "65535"
|
||||
Stk$[++Ndx] = "32768"
|
||||
Stk$[++Ndx] = "]"
|
||||
ELSE
|
||||
Ndx -= 2
|
||||
@ -8765,7 +8765,7 @@ SUB Emit
|
||||
IF (vt = vt_CHAR AND vt1 = vt_STRVAR AND IsSplat = 0) OR vt = vt_CHARPTR THEN
|
||||
Ndx++
|
||||
Stk$[Ndx] = "["
|
||||
Stk$[++Ndx] = "65535"
|
||||
Stk$[++Ndx] = "32768"
|
||||
Stk$[++Ndx] = "]"
|
||||
END IF
|
||||
END IF
|
||||
@ -8814,7 +8814,7 @@ SUB Emit
|
||||
IF vt = vt_STRVAR THEN
|
||||
SOF$ = "char"
|
||||
A++
|
||||
CONCAT(ZZ$,",65535")
|
||||
CONCAT(ZZ$,",32768")
|
||||
END IF
|
||||
IF A <> dms THEN
|
||||
Abort("Mismatch in dimensions for " + CVar$ + ", orignally " + STR$(dms) + " found " + STR$(A))
|
||||
@ -8963,8 +8963,8 @@ SUB Emit
|
||||
IF vt = vt_STRVAR THEN
|
||||
Stk$[Ndx] = "char"
|
||||
Var$ = Stk$[Ndx]
|
||||
CONCAT(DimType$, "[65535]")
|
||||
CONCAT(lszTmp$, "[65535]")
|
||||
CONCAT(DimType$, "[32768]")
|
||||
CONCAT(lszTmp$, "[32768]")
|
||||
END IF
|
||||
IF InFunc OR InTypeDef THEN
|
||||
IF IsRegister OR IsAuto THEN
|
||||
@ -9048,8 +9048,8 @@ SUB Emit
|
||||
NEXT
|
||||
lszTmp$ = LTRIM$(Clean$(lszTmp$))
|
||||
IF VType = vt_STRVAR THEN 'AND ((Stk$[3+IsVolatile] = "" AND InTypeDef) OR (NOT InTypeDef)) THEN
|
||||
'print lszTmp$
|
||||
IF lszTmp$ <> "[65535]" THEN CONCAT (lszTmp$, "[2048]")
|
||||
if len(lszTmp$) > 0 then print lszTmp$
|
||||
IF lszTmp$ <> "[32768]" THEN CONCAT (lszTmp$, "[32768]")
|
||||
'print lszTmp$
|
||||
END IF
|
||||
END IF
|
||||
@ -9117,7 +9117,7 @@ SUB Emit
|
||||
CONCAT (lszTmp$, Stk$[i])
|
||||
NEXT
|
||||
IF VType = vt_STRVAR AND lszTmp$ <> "" THEN
|
||||
CONCAT (lszTmp$, "[65535]")
|
||||
CONCAT (lszTmp$, "[32768]")
|
||||
END IF
|
||||
IF IsVolatile THEN
|
||||
CALL AddGlobal(CVar$, VType, 0,lszTmp$,0,0,3,0)
|
||||
@ -9164,7 +9164,7 @@ SUB Emit
|
||||
id = 0
|
||||
END IF
|
||||
IF vt = vt_STRVAR THEN ' AND DimType$ <> "" THEN
|
||||
CONCAT (DimType$, "[65535]")
|
||||
CONCAT (DimType$, "[32768]")
|
||||
END IF
|
||||
IF IsVolatile THEN
|
||||
CALL AddGlobal(Var$, vt, id, DimType$, IsPointer,0,4,0)
|
||||
@ -9227,7 +9227,7 @@ SUB Emit
|
||||
vt = vt_CHAR
|
||||
SOF$ = "char"
|
||||
dms++
|
||||
CONCAT(ZZ$,",65535")
|
||||
CONCAT(ZZ$,",32768")
|
||||
END IF
|
||||
IF Use_GenFree THEN
|
||||
GlobalDynaCnt++
|
||||
@ -9261,7 +9261,7 @@ SUB Emit
|
||||
id = 0
|
||||
END IF
|
||||
IF vt = vt_STRVAR THEN
|
||||
CONCAT (DimType$, "[65535]")
|
||||
CONCAT (DimType$, "[32768]")
|
||||
END IF
|
||||
IF IsShared THEN
|
||||
IF IsVolatile THEN
|
||||
@ -10003,7 +10003,7 @@ SUB DeclareVariables
|
||||
END IF
|
||||
|
||||
IF Use_Inputbuffer = TRUE THEN
|
||||
FPRINT Outfile,"char InputBuffer[65535];"
|
||||
FPRINT Outfile,"char InputBuffer[32768];"
|
||||
END IF
|
||||
|
||||
IF Use_Findfirst OR Use_Findnext THEN
|
||||
@ -10264,7 +10264,7 @@ SUB GetVarCode(varcode AS VARCODE PTR)
|
||||
varcode->Proto$ = varcode->Proto$ + "char *, "
|
||||
ELSE
|
||||
varcode->Header$ = varcode->Header$ + "char " + REMOVE$(Clean$(varcode->Token$), "*") + ", "
|
||||
varcode->Proto$ = varcode->Proto$ + "char [][65535], "
|
||||
varcode->Proto$ = varcode->Proto$ + "char [][32768], "
|
||||
END IF
|
||||
CASE mt_Opts
|
||||
varcode->Functype$ = "char *"
|
||||
@ -10362,7 +10362,7 @@ SUB GetVarCode(varcode AS VARCODE PTR)
|
||||
END SUB ' GetVarCode
|
||||
SUB AddProtos
|
||||
DIM RAW SaveMain$
|
||||
DIM RAW ZZ$*65535
|
||||
DIM RAW ZZ$*32768
|
||||
DIM RAW A
|
||||
SaveMain$ = ""
|
||||
OPEN FileOut$ FOR INPUT AS FP1
|
||||
@ -11512,7 +11512,7 @@ SUB PrintGlobal(A, idx, Storage$, P$, VarName$, VarDim$)
|
||||
CASE vt_BOOL
|
||||
FPRINT Outfile,Storage$;"bool ";VarName$;VarDim$;";"
|
||||
CASE vt_STRVAR
|
||||
IF VarDim$ = "" THEN VarDim$ = "[65535]"
|
||||
IF VarDim$ = "" THEN VarDim$ = "[32768]"
|
||||
FPRINT Outfile,Storage$;"char ";P$;VarName$;VarDim$;";"
|
||||
' handle normal
|
||||
CASE vt_VarMin TO vt_VarMax
|
||||
|
10
runtime.bas
10
runtime.bas
@ -71,8 +71,8 @@ IF NoRT=TRUE THEN EXIT SUB
|
||||
FPRINT Outfile,"char *BCX_TmpStr (size_t Bites)"
|
||||
FPRINT Outfile,"{"
|
||||
FPRINT Outfile," static int StrCnt;"
|
||||
FPRINT Outfile," static char *StrFunc[65535];"
|
||||
FPRINT Outfile," StrCnt=(StrCnt + 1) & 65535;"
|
||||
FPRINT Outfile," static char *StrFunc[32768];"
|
||||
FPRINT Outfile," StrCnt=(StrCnt + 1) & 32768;"
|
||||
FPRINT Outfile," if(StrFunc[StrCnt]) free (StrFunc[StrCnt]);"
|
||||
FPRINT Outfile," #if defined BCX_MAX_VAR_SIZE"
|
||||
FPRINT Outfile," if(Bites*sizeof(char)>BCX_MAX_VAR_SIZE)"
|
||||
@ -1499,7 +1499,7 @@ IF NoRT=TRUE THEN EXIT SUB
|
||||
FPRINT Outfile,"{"
|
||||
FPRINT Outfile," if(MaxCnt < 1) return -1;"
|
||||
FPRINT Outfile," int c = 0, cnt=-1, cnt2;"
|
||||
FPRINT Outfile," char A[65535];"
|
||||
FPRINT Outfile," char A[32768];"
|
||||
FPRINT Outfile," int *intptr = (int *)Array;"
|
||||
FPRINT Outfile," float *floatptr = (float *)Array;"
|
||||
FPRINT Outfile," double *doubleptr = (double *)Array;"
|
||||
@ -1580,7 +1580,7 @@ IF NoRT=TRUE THEN EXIT SUB
|
||||
FPRINT Outfile," int *intptr;"
|
||||
FPRINT Outfile," float *floatptr;"
|
||||
FPRINT Outfile," double *doubleptr;"
|
||||
FPRINT Outfile," char A[50][65535];"
|
||||
FPRINT Outfile," char A[50][32768];"
|
||||
FPRINT Outfile," va_list marker;"
|
||||
FPRINT Outfile," c = 0;"
|
||||
FPRINT Outfile," d = Split(A,input,"; ENC$(",") ; ");"
|
||||
@ -1626,7 +1626,7 @@ IF NoRT=TRUE THEN EXIT SUB
|
||||
FPRINT Outfile,"}\n\n"
|
||||
END IF
|
||||
IF Use_Split THEN
|
||||
FPRINT Outfile,"int Split (char Buf[][65535], char *T, char *Delim, int Flg)"
|
||||
FPRINT Outfile,"int Split (char Buf[][32768], char *T, char *Delim, int Flg)"
|
||||
FPRINT Outfile,"{"
|
||||
FPRINT Outfile," int Begin = 0;"
|
||||
FPRINT Outfile," int Count = 0;"
|
||||
|
@ -389,7 +389,7 @@ IF NoRT=FALSE THEN
|
||||
FPRINT Outfile,"int scan (char *input, char *format, ... );"
|
||||
END IF
|
||||
IF Use_Split THEN
|
||||
FPRINT Outfile,"int Split (char [][65535], char*, char*, int=0);"
|
||||
FPRINT Outfile,"int Split (char [][32768], char*, char*, int=0);"
|
||||
END IF
|
||||
IF Use_DSplit THEN
|
||||
FPRINT Outfile,"int DSplit (PCHAR *, char*, char*, int=0);"
|
||||
|
Loading…
Reference in New Issue
Block a user