(_AT_TEST_GLR_CALC): Include stdlib.h, since

we use malloc.  Don't assume 'A' through 'Z' are contiguous.
Don't assume strdup exists; POSIX says its an XSI extension.
Check for buffer overflow on input.
This commit is contained in:
Paul Eggert
2002-10-25 05:13:24 +00:00
parent b526ee6116
commit c469accea7

View File

@@ -88,6 +88,7 @@ declarator : ID { printf ("\"%s\" ", ]$[1); }
#include <assert.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int
@@ -111,29 +112,44 @@ yylex ()
{
char buffer[256];
int c;
unsigned int i;
#if YYPURE
# define yylval (*lvalp)
]m4_bmatch([$1], [location],[ (void) llocp;])[
#endif
while (1) {
c = getchar ();
switch (c) {
case EOF:
return 0;
case ' ': case '\t': case '\n': case '\f':
break;
default:
if (isalpha (c)) {
ungetc (c, stdin);
scanf ("%[A-Za-z0-9_]", buffer);
yylval = strdup (buffer);
return isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
}
return c;
while (1)
{
c = getchar ();
switch (c)
{
case EOF:
return 0;
case ' ': case '\t': case '\n': case '\f':
break;
default:
if (isalpha (c))
{
i = 0;
do
{
buffer[i++] = c;
if (i == sizeof buffer - 1)
abort ();
c = getchar ();
}
while (isalnum (c) || c == '_');
ungetc (c, stdin);
buffer[i++] = 0;
yylval = strcpy (malloc (i), buffer);
return isupper ((unsigned char) buffer[0]) ? TYPENAME : ID;
}
return c;
}
}
}
}
int