=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/yacc/skeleton.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- src/usr.bin/yacc/skeleton.c 2015/12/30 14:45:38 1.37 +++ src/usr.bin/yacc/skeleton.c 2015/12/30 17:16:47 1.38 @@ -1,4 +1,4 @@ -/* $OpenBSD: skeleton.c,v 1.37 2015/12/30 14:45:38 tedu Exp $ */ +/* $OpenBSD: skeleton.c,v 1.38 2015/12/30 17:16:47 mmcc Exp $ */ /* $NetBSD: skeleton.c,v 1.10 1996/03/25 00:36:18 mrg Exp $ */ /* @@ -137,14 +137,16 @@ "#endif", " if (newsize && YY_SIZE_MAX / newsize < sizeof *newss)", " goto bail;", - " newss = (short *)realloc(yyss, newsize * sizeof(*newss)); /* overflow check above */", + " newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :", + " (short *)malloc(newsize * sizeof *newss); /* overflow check above */", " if (newss == NULL)", " goto bail;", " yyss = newss;", " yyssp = newss + sslen;", " if (newsize && YY_SIZE_MAX / newsize < sizeof *newvs)", " goto bail;", - " newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs)); /* overflow check above */", + " newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :", + " (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */", " if (newvs == NULL)", " goto bail;", " yyvs = newvs;", @@ -153,8 +155,10 @@ " yysslim = yyss + newsize - 1;", " return 0;", "bail:", - " free(yyss);", - " free(yyvs);", + " if (yyss)", + " free(yyss);", + " if (yyvs)", + " free(yyvs);", " yyss = yyssp = NULL;", " yyvs = yyvsp = NULL;", " yystacksize = 0;", @@ -364,15 +368,19 @@ "yyoverflow:", " yyerror(\"yacc stack overflow\");", "yyabort:", - " free(yyss);", - " free(yyvs);", + " if (yyss)", + " free(yyss);", + " if (yyvs)", + " free(yyvs);", " yyss = yyssp = NULL;", " yyvs = yyvsp = NULL;", " yystacksize = 0;", " return (1);", "yyaccept:", - " free(yyss);", - " free(yyvs);", + " if (yyss)", + " free(yyss);", + " if (yyvs)", + " free(yyvs);", " yyss = yyssp = NULL;", " yyvs = yyvsp = NULL;", " yystacksize = 0;",