]> git.mxchange.org Git - simgear.git/commitdiff
Fix for #587, crash on break/continue.
authorJames Turner <zakalawe@mac.com>
Tue, 23 Jul 2013 20:58:38 +0000 (21:58 +0100)
committerJames Turner <zakalawe@mac.com>
Tue, 23 Jul 2013 20:58:38 +0000 (21:58 +0100)
Look for use of break/continue outside of a loop context,
and report a parser error instead of crashed. Thanks to
Philosopher for the patch.

simgear/nasal/codegen.c

index fa2ddc22495fdb9be1a98d45ad83710b455e0aa7..8636fbb958e0f90c8fe3132629d429c69d8cbabe 100644 (file)
@@ -485,6 +485,11 @@ static int tokMatch(struct Token* a, struct Token* b)
 static void genBreakContinue(struct Parser* p, struct Token* t)
 {
     int levels = 1, loop = -1, bp, cp, i;
+    // http://code.google.com/p/flightgear-bugs/issues/detail?id=587
+    // Make sure we are inside of a loop
+    if(p->cg->loopTop <= 0)
+        naParseError(p, "break/continue outside of a valid loop", t->line);
+    
     if(RIGHT(t)) {
         if(RIGHT(t)->type != TOK_SYMBOL)
             naParseError(p, "bad break/continue label", t->line);