]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: fix undefined behavior
authorDmitriy Vyukov <dvyukov@google.com>
Thu, 21 Aug 2014 08:34:26 +0000 (12:34 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Thu, 21 Aug 2014 08:34:26 +0000 (12:34 +0400)
UndefinedBehaviorSanitizer claims it is UB in C:
src/cmd/gc/racewalk.c:422:37: runtime error: member access within null pointer of type 'Node' (aka 'struct Node')
src/cmd/gc/racewalk.c:423:37: runtime error: member access within null pointer of type 'Node' (aka 'struct Node')

LGTM=rsc
R=dave, rsc
CC=golang-codereviews
https://golang.org/cl/125570043

src/cmd/gc/racewalk.c

index 285bd78a258ac63715d9892ea66992bf2d4343a7..27581702ccb9d20d4101bacde34e3dcc443c53a8 100644 (file)
@@ -419,8 +419,10 @@ racewalknode(Node **np, NodeList **init, int wr, int skip)
 ret:
        if(n->op != OBLOCK)  // OBLOCK is handled above in a special way.
                racewalklist(n->list, init);
-       racewalknode(&n->ntest, &n->ntest->ninit, 0, 0);
-       racewalknode(&n->nincr, &n->nincr->ninit, 0, 0);
+       if(n->ntest != N)
+               racewalknode(&n->ntest, &n->ntest->ninit, 0, 0);
+       if(n->nincr != N)
+               racewalknode(&n->nincr, &n->nincr->ninit, 0, 0);
        racewalklist(n->nbody, nil);
        racewalklist(n->nelse, nil);
        racewalklist(n->rlist, nil);