Sfoglia il codice sorgente

[std][hl] Fix array pos check, force UInt (#11810)

* [std][hl] Fix array pos check, force UInt

* [tests] add tests

* [tests] only run on hl

* [tests] fix indent
Yuxiao Mao 9 mesi fa
parent
commit
13bea2cb38

+ 2 - 2
std/hl/types/ArrayBytes.hx

@@ -302,14 +302,14 @@ class BytesIterator<T> extends ArrayIterator<T> {
 
 
 	override function getDyn(pos:Int):Dynamic {
 	override function getDyn(pos:Int):Dynamic {
 		var pos:UInt = pos;
 		var pos:UInt = pos;
-		if (pos >= length)
+		if (pos >= (length : UInt))
 			return bytes.nullValue;
 			return bytes.nullValue;
 		return bytes[pos];
 		return bytes[pos];
 	}
 	}
 
 
 	override function setDyn(pos:Int, v:Dynamic) {
 	override function setDyn(pos:Int, v:Dynamic) {
 		var pos:UInt = pos;
 		var pos:UInt = pos;
-		if (pos >= length)
+		if (pos >= (length : UInt))
 			__expand(pos);
 			__expand(pos);
 		bytes[pos] = v;
 		bytes[pos] = v;
 	}
 	}

+ 2 - 2
std/hl/types/ArrayObj.hx

@@ -325,14 +325,14 @@ class ArrayObj<T> extends ArrayBase {
 
 
 	override function getDyn(pos:Int):Dynamic {
 	override function getDyn(pos:Int):Dynamic {
 		var pos:UInt = pos;
 		var pos:UInt = pos;
-		if (pos >= length)
+		if (pos >= (length : UInt))
 			return null;
 			return null;
 		return array[pos];
 		return array[pos];
 	}
 	}
 
 
 	override function setDyn(pos:Int, v:Dynamic) {
 	override function setDyn(pos:Int, v:Dynamic) {
 		var pos:UInt = pos;
 		var pos:UInt = pos;
-		if (pos >= length)
+		if (pos >= (length : UInt))
 			__expand(pos);
 			__expand(pos);
 		array[pos] = Api.safeCast(v, array.getType());
 		array[pos] = Api.safeCast(v, array.getType());
 	}
 	}

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

@@ -0,0 +1,12 @@
+package unit.issues;
+
+class Issue11810 extends Test {
+	#if hl
+	function test() {
+		var arrObj = [];
+		eq(null, arrObj[arrObj.length-1]);
+		var arrBytes : Array<Int> = [];
+		eq(0, arrBytes[arrBytes.length-1]);
+	}
+	#end
+}