]> git.mxchange.org Git - simgear.git/commitdiff
Fix two crash conditions Ampere found. These are just temporary
authorandy <andy>
Sun, 29 May 2005 16:13:48 +0000 (16:13 +0000)
committerandy <andy>
Sun, 29 May 2005 16:13:48 +0000 (16:13 +0000)
patches; my private version has rewritten both of these functions
(ironically fixing these bugs in the process) to handle negative
offsets meaning "from the end".

simgear/nasal/code.c
simgear/nasal/lib.c

index c7dd68ee5a28b66004f1dbef2312ed9bdd278791..be7b103fba60e661031f37a713fcbbf87a5204ab 100644 (file)
@@ -64,7 +64,7 @@ static naRef stringify(struct Context* ctx, naRef r)
 static int checkVec(struct Context* ctx, naRef vec, naRef idx)
 {
     int i = (int)numify(ctx, idx);
-    if(i < 0 || i >= vec.ref.ptr.vec->rec->size)
+    if(i < 0 || !vec.ref.ptr.vec->rec || i >= vec.ref.ptr.vec->rec->size)
         ERR(ctx, "vector index out of bounds");
     return i;
 }
index 04d7bd644d3b5fd432bf3fc015aaa3df9a5e4c29..2a3fc70d5b45a3b01cef88b9d14668b1cc81bc5d 100644 (file)
@@ -115,6 +115,7 @@ static naRef substr(naContext c, naRef me, int argc, naRef* args)
     start = (int)startR.num;
     if(naIsNil(lenR)) {
         len = naStr_len(src) - start;
+        if(len < 0) return naNil();
     } else {
         lenR = naNumValue(lenR);
         if(naIsNil(lenR)) return naNil();