From 1725de8772ad60eb7d942aa85a2ab7e2eed59120 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 13 Mar 2003 20:17:41 +0000 Subject: [PATCH] regen --- lex.yy.c | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/lex.yy.c b/lex.yy.c index 4fb1aeeb0..8025ed0ed 100644 --- a/lex.yy.c +++ b/lex.yy.c @@ -2518,41 +2518,31 @@ fill_args(s, len, addspace) int new_len; char *p; - /* - * If first arg, malloc() some room, else if we don't - * have enough space realloc() some more. - */ if (yylval.command.args == NULL) { addspace = 0; new_len = len; + } else + new_len = arg_len + len + addspace; + if (new_len >= arg_size) { + /* Allocate more space than we need for subsequent args */ while (new_len >= (arg_size += COMMANDARGINC)) ; - yylval.command.args = (char *) malloc(arg_size); - if (yylval.command.args == NULL) - yyerror("unable to allocate memory"); - } else { - new_len = arg_len + len + addspace; - - if (new_len >= arg_size) { - /* Allocate more space than we need for subsequent args */ - while (new_len >= (arg_size += COMMANDARGINC)) - ; - - if ((p = (char *) realloc(yylval.command.args, arg_size)) == NULL) { + if ((p = (char *) realloc(yylval.command.args, arg_size)) == NULL) { + if (yylval.command.args != NULL) free(yylval.command.args); - yyerror("unable to allocate memory"); - } else - yylval.command.args = p; - } + yyerror("unable to allocate memory"); + } else + yylval.command.args = p; } /* Efficiently append the arg (with a leading space if needed). */ p = yylval.command.args + arg_len; if (addspace) *p++ = ' '; - (void) strcpy(p, s); + if (strlcpy(p, s, arg_size - (p - yylval.command.args)) != len) + yyerror("fill_args: buffer overflow"); /* paranoia */ arg_len = new_len; } -- 2.40.0