]> granicus.if.org Git - jq/commitdiff
Fix assert fail when delpaths is given non-array (fix #901)
authorDavid Tolnay <dtolnay@gmail.com>
Mon, 17 Aug 2015 02:44:16 +0000 (19:44 -0700)
committerDavid Tolnay <dtolnay@gmail.com>
Mon, 17 Aug 2015 02:44:16 +0000 (19:44 -0700)
jv_aux.c
tests/jq.test

index b38cf49e8769ba72ee68afd0cc613bc1a51d960e..4d48f5779cb2f924ab50533c805626c4614cdc6d 100644 (file)
--- a/jv_aux.c
+++ b/jv_aux.c
@@ -390,6 +390,11 @@ static jv delpaths_sorted(jv object, jv paths, int start) {
 }
 
 jv jv_delpaths(jv object, jv paths) {
+  if (jv_get_kind(paths) != JV_KIND_ARRAY) {
+    jv_free(object);
+    jv_free(paths);
+    return jv_invalid_with_msg(jv_string("Paths must be specified as an array"));
+  }
   paths = jv_sort(paths, jv_copy(paths));
   jv_array_foreach(paths, i, elem) {
     if (jv_get_kind(elem) != JV_KIND_ARRAY) {
index 07d81ee82c51f24dbd12f30f35b39955df9124f7..021253d8b58b7a8e60ddcc7b3b95120354ef6515 100644 (file)
@@ -756,6 +756,10 @@ delpaths([[-200]])
 [1,2,3]
 [1,2,3]
 
+try delpaths(0) catch .
+{}
+"Paths must be specified as an array"
+
 del(.), del(empty), del((.foo,.bar,.baz) | .[2,3,0]), del(.foo[0], .bar[0], .foo, .baz.bar[0].x)
 {"foo": [0,1,2,3,4], "bar": [0,1]}
 null