scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit 5bf9f36c0f236dd5429beb16c1c2b73cf939a4d4
parent 999096d35f452f1594c10b4b2822d6c3e7f08813
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Mon,  2 Jan 2023 17:13:15 +0100

cc1: Avoid index invalid field array

When the field in the initializer is not valid we should
not try to use the array fields[] because it is likely
that it will drive to a segfault.

Diffstat:
Msrc/cmd/cc/cc1/init.c | 4++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/cmd/cc/cc1/init.c b/src/cmd/cc/cc1/init.c @@ -61,7 +61,7 @@ fielddesig(Type *tp, Init *ip) if ((sym->flags & SDECLARED) == 0) { errorp("unknown field '%s' specified in initializer", sym->name); - return 0; + return -1; } for (p = tp->p.fields; *p != sym; ++p) ; @@ -233,7 +233,7 @@ initlist_helper(Type *tp) goto desig_list; case '.': in.pos = fielddesig(tp, &in); - if (in.pos < nelem) + if (in.pos >= 0 && in.pos < nelem) curtp = tp->p.fields[in.pos]->type; desig_list: if (yytoken == '[' || yytoken == '.') {