Переглянути джерело

[php] avoid setting internal php-array items upon accessing a dynamically typed haxe-array by index out of bounds (fixes #10834)

Aleksandr Kuzmenko 2 роки тому
батько
коміт
9e74a2b838
2 змінених файлів з 19 додано та 4 видалено
  1. 7 4
      std/php/_std/Array.hx
  2. 12 0
      tests/unit/src/unit/issues/Issue10834.hx

+ 7 - 4
std/php/_std/Array.hx

@@ -215,11 +215,14 @@ final class Array<T> implements ArrayAccess<Int, T> implements IteratorAggregate
 	@:noCompletion @:keep
 	@:php.attribute('\\ReturnTypeWillChange')
 	function offsetGet(offset:Int):Ref<T> {
-		try {
-			return arr[offset];
-		} catch (e:Dynamic) {
-			return null;
+		if(offset < 0 || offset >= length) {
+			//This var is required in generated php code
+			//because only variables can be returned by reference.
+			final result = null;
+			Syntax.keepVar(result);
+			return result;
 		}
+		return arr[offset];
 	}
 
 	@:noCompletion @:keep

+ 12 - 0
tests/unit/src/unit/issues/Issue10834.hx

@@ -0,0 +1,12 @@
+package unit.issues;
+
+class Issue10834 extends Test {
+	var tmp:Any;
+	var a:Dynamic = [];
+
+	function test() {
+		tmp = a[0];
+		eq(0, a.length);
+		eq('[]', a.toString());
+	}
+}