From 6d308113b8ab15b9ffe97534480c9e85cc461f77 Mon Sep 17 00:00:00 2001 From: Kesse Jones Date: Wed, 22 Apr 2020 08:45:26 -0300 Subject: [PATCH] LibJS: Fix Array.prototype.indexOf fromIndex negative If negative fromIndex considers displacement from the end of the array without decreasing 1 of de size. --- Libraries/LibJS/Runtime/ArrayPrototype.cpp | 2 +- Libraries/LibJS/Tests/Array.prototype.indexOf.js | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Libraries/LibJS/Runtime/ArrayPrototype.cpp b/Libraries/LibJS/Runtime/ArrayPrototype.cpp index eeb69db11b..0592d5cc73 100644 --- a/Libraries/LibJS/Runtime/ArrayPrototype.cpp +++ b/Libraries/LibJS/Runtime/ArrayPrototype.cpp @@ -321,7 +321,7 @@ Value ArrayPrototype::index_of(Interpreter& interpreter) if (from_index < negative_min_index) from_index = 0; else if (from_index < 0) - from_index = (array_size - 1) + from_index; + from_index = array_size + from_index; } auto search_element = interpreter.argument(0); diff --git a/Libraries/LibJS/Tests/Array.prototype.indexOf.js b/Libraries/LibJS/Tests/Array.prototype.indexOf.js index 40e1f72440..630745c283 100644 --- a/Libraries/LibJS/Tests/Array.prototype.indexOf.js +++ b/Libraries/LibJS/Tests/Array.prototype.indexOf.js @@ -14,6 +14,9 @@ try { assert(array.indexOf(1, 1000) === -1); assert(array.indexOf(1, -1000) === 2); assert(array.indexOf('serenity') === -1); + assert(array.indexOf(false, -1) === 4); + assert(array.indexOf(2, -1) === -1); + assert(array.indexOf(2, -2) === 3); assert([].indexOf('serenity') === -1); assert([].indexOf('serenity', 10) === -1); assert([].indexOf('serenity', -10) === -1);