diff --git a/src/jq_test.c b/src/jq_test.c index 0229254575..858b99d11a 100644 --- a/src/jq_test.c +++ b/src/jq_test.c @@ -586,5 +586,11 @@ static void jv_test() { jv other = jv_string_append_buf(jv_borrow(string), "test", 4); assert(jv_equal(string, jv_string("value"))); assert(jv_equal(other, jv_string("valuetest"))); + + array = JV_ARRAY(jv_string("test")); + jv array_out = jv_array_set(jv_borrow(array), 0, jv_string("value")); + assert(jv_equal(array, JV_ARRAY(jv_string("test")))); + assert(!jv_is_borrowed(array_out)); + jv_free(array_out); } } diff --git a/src/jv.c b/src/jv.c index 9b268eace9..59d93f6dc6 100644 --- a/src/jv.c +++ b/src/jv.c @@ -867,7 +867,7 @@ static jv* jvp_array_write(jv* a, int i) { int j; for (j = 0; j < jvp_array_length(*a); j++) { new_array->elements[j] = - jv_unborrow(array->elements[j + jvp_array_offset(*a)]); + jv_copy(array->elements[j + jvp_array_offset(*a)]); } for (; j < new_length; j++) { new_array->elements[j] = JV_NULL; @@ -990,6 +990,8 @@ jv jv_array_get(jv j, int idx) { jv jv_array_set(jv j, int idx, jv val) { assert(JVP_HAS_KIND(j, JV_KIND_ARRAY)); + j = jv_return(j); + if (idx < 0) idx = jvp_array_length(j) + idx; if (idx < 0) {