diff --git a/src/sbbs3/readtext.c b/src/sbbs3/readtext.c index a23674f876c79378d1812ed38fd1abad9ce391a3..7e813c8fce993c07f837586758d12d2ed2fba253 100644 --- a/src/sbbs3/readtext.c +++ b/src/sbbs3/readtext.c @@ -7,7 +7,7 @@ /****************************************************************************/ char *readtext(long *line,FILE *stream,long dflt) { - char buf[2048],str[2048],tmp[256],*p,*p2; + char buf[MAX_TEXTDAT_ITEM_LEN+256],str[MAX_TEXTDAT_ITEM_LEN+1],tmp[256],*p,*p2; int i,j,k; if(!fgets(buf,256,stream)) { @@ -27,7 +27,7 @@ char *readtext(long *line,FILE *stream,long dflt) goto use_default; } if(*(p+1)=='\\') /* merge multiple lines */ - while(strlen(buf)<2000) { + while(strlen(buf)<MAX_TEXTDAT_ITEM_LEN) { if(!fgets(str,255,stream)) { /* Hide the EOF */ if(feof(stream)) @@ -47,7 +47,7 @@ char *readtext(long *line,FILE *stream,long dflt) } *(p)=0; k=strlen(buf); - for(i=1,j=0;i<k;j++) { + for(i=1,j=0;i<k && j<sizeof(str)-1;j++) { if(buf[i]=='\\') { /* escape */ i++; if(isdigit(buf[i])) { diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h index be0fccb17e81594311f4fa9fcf452b9387667da4..dddba8f81c531ed5e343f0fbfa4c2b65f948f32e 100644 --- a/src/sbbs3/sbbs.h +++ b/src/sbbs3/sbbs.h @@ -538,7 +538,7 @@ public: char getkey(long mode); /* Waits for a key hit local or remote */ long getkeys(const char *str, ulong max); void ungetkey(char ch); /* Places 'ch' into the input buffer */ - char question[128]; + char question[MAX_TEXTDAT_ITEM_LEN+1]; bool yesno(const char *str); bool noyes(const char *str); void pause(void); diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h index 13296b4e3bb93b4e9f095cc19a2a777d56294bf8..e02e2bcdac8b7ed8c41df9f6bd7e61b55bb88d8f 100644 --- a/src/sbbs3/sbbsdefs.h +++ b/src/sbbs3/sbbsdefs.h @@ -99,6 +99,8 @@ typedef struct { #define MAX_FILES 10000 /* Maximum number of files per dir */ #define MAX_USERXFER 500 /* Maximum number of dest. users of usrxfer */ +#define MAX_TEXTDAT_ITEM_LEN 2000 + #define LEN_DIR 63 /* Maximum length of directory paths */ #define LEN_CMD 63 /* Maximum length of command lines */