From: Russ Cox Date: Fri, 20 Nov 2009 02:20:06 +0000 (-0800) Subject: gc: reject large channel values at compile time X-Git-Tag: weekly.2009-12-07~188 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d116a3272753cb778bdb2686505dc3d84d854c40;p=gostls13.git gc: reject large channel values at compile time Fixes #144. R=ken2 CC=agl1 https://golang.org/cl/156102 --- diff --git a/src/cmd/gc/align.c b/src/cmd/gc/align.c index d1cc9c23b6..b74ac0f29f 100644 --- a/src/cmd/gc/align.c +++ b/src/cmd/gc/align.c @@ -186,6 +186,18 @@ dowidth(Type *t) case TCHAN: // implemented as pointer w = widthptr; checkwidth(t->type); + + // make fake type to check later to + // trigger channel argument check. + t1 = typ(TCHANARGS); + t1->type = t; + checkwidth(t1); + break; + case TCHANARGS: + t1 = t->type; + dowidth(t->type); // just in case + if(t1->type->width >= (1<<16)) + yyerror("channel element type too large (>64kB)"); break; case TMAP: // implemented as pointer w = widthptr; diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index 7702efbf74..595d7c8b8c 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -441,6 +441,7 @@ enum // pseudo-type for frame layout TFUNCARGS, + TCHANARGS, NTYPE, };