From 8721002b543b47f20eff672dbb82b741d26f32e1 Mon Sep 17 00:00:00 2001 From: Joshua Kwan Date: Sun, 1 Feb 2004 08:10:18 +0000 Subject: [PATCH] Error handling for negative numbers. git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@204 db0b04b0-f4d1-0310-9a6d-de3e77497b0e --- config.l | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/config.l b/config.l index 4a88562..e4ad02e 100644 --- a/config.l +++ b/config.l @@ -14,7 +14,7 @@ unsigned int line = 1, col = 0; %} -NUMBER [0-9]+ +NUMBER -?[0-9]+ VALUE \".*\" MALSTRING \"[^\"\n]*\n WHITE [\t ]* @@ -22,7 +22,30 @@ COMMENT ^#.* %% -{NUMBER} { yylval.i = atoi(yytext); return TYPE_NUMBER; } +{NUMBER} { + unsigned int x; + errno = 0; + + if (atoi(yytext) < 0) + { + fprintf(stderr,"%s:%d: negative value not accepted! Fix it now!\n", + config, line); + graceful_exit(1); + } + + x = strtoul(yytext, NULL, 10); + + if (errno == ERANGE) + { + fprintf(stderr, "%s:%d: %s is too big! Fix it now!\n", + config, line, yytext); + graceful_exit(1); + } + + yylval.i = x; + return TYPE_NUMBER; +} + {VALUE} { yytext[yyleng - 1] = '\0'; /* Kill the trailing quote */ yylval.s = strdup(yytext + 1); /* kill leading quote */