Fix a crash on group_by of empty list. Fixes #208.

This commit is contained in:
Stephen Dolan committed 2013-11-07 12:18:48 +00:00
1 parent 0feeb7d0d4
commit 8d4748c8df
2 files changed
+19 -13

No files matched your search

+15 -13
View File
@@ -545,21 +545,23 @@ jv jv_group(jv objects, jv keys) {
int n = jv_array_length(jv_copy(objects)); int n = jv_array_length(jv_copy(objects));
struct sort_entry* entries = sort_items(objects, keys); struct sort_entry* entries = sort_items(objects, keys);
jv ret = jv_array(); jv ret = jv_array();
jv curr_key = entries[0].key; if (n > 0) {
jv group = jv_array_append(jv_array(), entries[0].object); jv curr_key = entries[0].key;
for (int i = 1; i < n; i++) { jv group = jv_array_append(jv_array(), entries[0].object);
if (jv_equal(jv_copy(curr_key), jv_copy(entries[i].key))) { for (int i = 1; i < n; i++) {
jv_free(entries[i].key); if (jv_equal(jv_copy(curr_key), jv_copy(entries[i].key))) {
} else { jv_free(entries[i].key);
jv_free(curr_key); } else {
curr_key = entries[i].key; jv_free(curr_key);
ret = jv_array_append(ret, group); curr_key = entries[i].key;
group = jv_array(); ret = jv_array_append(ret, group);
group = jv_array();
}
group = jv_array_append(group, entries[i].object);
} }
group = jv_array_append(group, entries[i].object); jv_free(curr_key);
ret = jv_array_append(ret, group);
} }
jv_free(curr_key);
ret = jv_array_append(ret, group);
jv_mem_free(entries); jv_mem_free(entries);
return ret; return ret;
} }
+4
View File
@@ -610,6 +610,10 @@ unique
[1,2,5,3,5,3,1,3] [1,2,5,3,5,3,1,3]
[1,2,3,5] [1,2,3,5]
unique
[]
[]
[min, max, min_by(.[1]), max_by(.[1]), min_by(.[2]), max_by(.[2])] [min, max, min_by(.[1]), max_by(.[1]), min_by(.[2]), max_by(.[2])]
[[4,2,"a"],[3,1,"a"],[2,4,"a"],[1,3,"a"]] [[4,2,"a"],[3,1,"a"],[2,4,"a"],[1,3,"a"]]
[[1,3,"a"],[4,2,"a"],[3,1,"a"],[2,4,"a"],[4,2,"a"],[1,3,"a"]] [[1,3,"a"],[4,2,"a"],[3,1,"a"],[2,4,"a"],[4,2,"a"],[1,3,"a"]]