} else {
/* UTF-8 string. */
end = start + string->size;
- start = njs_string_offset(start, end, slice->start);
- /* Evaluate size of the slice in bytes and ajdust length. */
- p = start;
- n = length;
+ if (slice->start < slice->string_length) {
+ start = njs_string_offset(start, end, slice->start);
- while (n != 0 && p < end) {
- p = nxt_utf8_next(p, end);
- n--;
- }
+ /* Evaluate size of the slice in bytes and adjust length. */
+ p = start;
+ n = length;
+
+ while (n != 0 && p < end) {
+ p = nxt_utf8_next(p, end);
+ n--;
+ }
- size = p - start;
- length -= n;
+ size = p - start;
+ length -= n;
+
+ } else {
+ length = 0;
+ size = 0;
+ }
}
dst->start = (u_char *) start;
{ nxt_string("'α'.repeat(32).substring(32)"),
nxt_string("") },
+ { nxt_string("'α'.repeat(32).substring(32,32)"),
+ nxt_string("") },
+
{ nxt_string("'abcdefghijklmno'.slice(NaN, 5)"),
nxt_string("abcde") },