Welcome! Log In Create A New Profile

Advanced

[njs] A fix in Array.slice() function.

October 12, 2016 12:32PM
details: http://hg.nginx.org/njs/rev/8046b999aaaf
branches:
changeset: 198:8046b999aaaf
user: Igor Sysoev <igor@sysoev.ru>
date: Wed Oct 12 19:08:57 2016 +0300
description:
A fix in Array.slice() function.

diffstat:

njs/njs_array.c | 34 +++++++++++++++++++++-------------
njs/test/njs_unit_test.c | 18 ++++++++++++++++++
2 files changed, 39 insertions(+), 13 deletions(-)

diffs (74 lines):

diff -r beba11b9f2a1 -r 8046b999aaaf njs/njs_array.c
--- a/njs/njs_array.c Tue Oct 11 20:09:18 2016 +0300
+++ b/njs/njs_array.c Wed Oct 12 19:08:57 2016 +0300
@@ -387,21 +387,29 @@ njs_array_prototype_slice(njs_vm_t *vm,
}
}

- end = length;
-
- if (nargs > 2) {
- end = args[2].data.u.number;
-
- if (end < 0) {
- end += length;
- }
- }
-
- length = end - start;
-
- if (length < 0) {
+ if (start >= length) {
start = 0;
length = 0;
+
+ } else {
+ end = length;
+
+ if (nargs > 2) {
+ end = args[2].data.u.number;
+
+ if (end < 0) {
+ end += length;
+ }
+ }
+
+ if (length >= end) {
+ length = end - start;
+
+ if (length < 0) {
+ start = 0;
+ length = 0;
+ }
+ }
}
}
}
diff -r beba11b9f2a1 -r 8046b999aaaf njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c Tue Oct 11 20:09:18 2016 +0300
+++ b/njs/test/njs_unit_test.c Wed Oct 12 19:08:57 2016 +0300
@@ -2260,6 +2260,24 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("a = [1,2]; a[100] = 100; a[100] +' '+ a.length"),
nxt_string("100 101") },

+ { nxt_string("Array.prototype.slice(1)"),
+ nxt_string("") },
+
+ { nxt_string("Array.prototype.slice(1,2)"),
+ nxt_string("") },
+
+ { nxt_string("Array.prototype.pop()"),
+ nxt_string("undefined") },
+
+ { nxt_string("Array.prototype.shift()"),
+ nxt_string("undefined") },
+
+ { nxt_string("[0,1,2,3,4].slice(1,4)"),
+ nxt_string("1,2,3") },
+
+ { nxt_string("[0,1,2,3,4].slice(6,7)"),
+ nxt_string("") },
+
{ nxt_string("a = [1,2,3,4,5]; b = a.slice(3); b[0] +' '+ b[1] +' '+ b[2]"),
nxt_string("4 5 undefined") },


_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] A fix in Array.slice() function.

Igor Sysoev 691 October 12, 2016 12:32PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 296
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready