Change contains to return true for empty string needles
The behavior of memmem for an empty needle is inconsistent between implementations of libc. Our tests imply that we want an empty string needle to be true, so check for an empty needle before calling memmem.
This commit is contained in:
1 parent
df8346a935
commit
22e6f9e966
1 file changed
+7
-2
@@ -1344,8 +1344,13 @@ int jv_contains(jv a, jv b) {
|
||||
} else if (jv_get_kind(a) == JV_KIND_ARRAY) {
|
||||
r = jv_array_contains(jv_copy(a), jv_copy(b));
|
||||
} else if (jv_get_kind(a) == JV_KIND_STRING) {
|
||||
r = _jq_memmem(jv_string_value(a), jv_string_length_bytes(jv_copy(a)),
|
||||
jv_string_value(b), jv_string_length_bytes(jv_copy(b))) != 0;
|
||||
int b_len = jv_string_length_bytes(jv_copy(b));
|
||||
if (b_len != 0) {
|
||||
r = _jq_memmem(jv_string_value(a), jv_string_length_bytes(jv_copy(a)),
|
||||
jv_string_value(b), b_len) != 0;
|
||||
} else {
|
||||
r = 1;
|
||||
}
|
||||
} else {
|
||||
r = jv_equal(jv_copy(a), jv_copy(b));
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user