Rearranged the algorithm in get_text() to fix a memory overrun.
This commit is contained in:
parent
a1ba8c6d3f
commit
685e85002e
|
@ -608,7 +608,6 @@ get_text(formals, length)
|
|||
register unsigned int text_size;
|
||||
char *text = Malloc(text_size = ITEXTSIZE);
|
||||
register unsigned int pos = 0;
|
||||
int match = 0;
|
||||
|
||||
LoadChar(c);
|
||||
|
||||
|
@ -622,19 +621,15 @@ get_text(formals, length)
|
|||
*/
|
||||
text[pos++] = ' ';
|
||||
++LineNumber;
|
||||
}
|
||||
else {
|
||||
text[pos++] = '\\';
|
||||
if (pos == text_size)
|
||||
text = Realloc(text, text_size <<= 1);
|
||||
text[pos++] = c;
|
||||
if (pos == text_size)
|
||||
text = Realloc(text, text_size <<= 1);
|
||||
}
|
||||
LoadChar(c);
|
||||
}
|
||||
else
|
||||
if (match == 0 && c == '/') {
|
||||
text[pos++] = '\\';
|
||||
if (pos == text_size)
|
||||
text = Realloc(text, text_size <<= 1);
|
||||
}
|
||||
else
|
||||
if ( c == '/') {
|
||||
LoadChar(c);
|
||||
if (c == '*') {
|
||||
skipcomment();
|
||||
|
@ -647,19 +642,7 @@ get_text(formals, length)
|
|||
text = Realloc(text, text_size <<= 1);
|
||||
}
|
||||
else
|
||||
if (c == '\'' || c == '"') {
|
||||
text[pos++] = c;
|
||||
if (pos == text_size)
|
||||
text = Realloc(text, text_size <<= 1);
|
||||
if (match == c) {
|
||||
match = 0;
|
||||
} else if (match == 0) {
|
||||
match = c;
|
||||
}
|
||||
LoadChar(c);
|
||||
}
|
||||
else
|
||||
if (match == 0 && formals && class(c) == STIDF) {
|
||||
if (formals && class(c) == STIDF) {
|
||||
char id_buf[IDFSIZE + 1];
|
||||
register char *idp = id_buf;
|
||||
int n;
|
||||
|
|
Loading…
Reference in a new issue