Browse Source

Added a sanity check for super operator loading. Unit test added.

Marco Bambini 8 years ago
parent
commit
a39c6a461d

+ 5 - 0
src/runtime/gravity_core.c

@@ -457,6 +457,11 @@ static bool object_real_load (gravity_vm *vm, gravity_value_t *args, uint16_t na
             }
 		}
 	}
+    
+    // sanity check for super operator
+    if (is_super && !VALUE_ISA_CLASS(target)) {
+        RETURN_ERROR("Unable to lookup super for non class object");
+    }
 	
 	// retrieve class and process key
 	gravity_class_t *c = (is_super) ? VALUE_AS_CLASS(target) : gravity_value_getclass(target);

+ 35 - 0
test/fuzzy/2017-05-25/id-000000,sig-11,src-003821,op-havoc,rep-2.gravity

@@ -0,0 +1,35 @@
+#unittest {
+	name: "Fiber basic usage.";
+	result: 23;
+};
+
+var g = 0;
+
+func main() {
+    var fiber = Fiber.create({
+        g += 10;
+        Fiber.yield()
+        g += 10;
+    });
+    
+    g += 1;
+    fiber()
+    g += 1;
+                                                 super.d()
+             fiber()
+    g += 1;
+                                                                     ;
+                                                          ;
+    
+    g += 1;
+    fiber()
+    g += 1;                                                 super.d()
+             fiber()
+    g += 1;
+                                                                                            fiber()
+    g += 1;
+                                                                             4                                                    fiber()
+    g += 1;
+                                                                                                                                                                                                                                             fiber()
+    g += 1;  return g;
+}