mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +01:00
sprinters: bugfix when NULL passed for a string.
The string function in a sprinter may be called with a NULL string pointer (eg if a header is absent). This causes a segfault. We fix this by checking for a null pointer in the string functions and update the sprinter documentation. At the moment some output when format=text is done directly rather than via an sprinter: in that case a null pointer is passed to printf or similar and a "(null)" appears in the output. That behaviour is not changed in this patch.
This commit is contained in:
parent
36e640852b
commit
94c3b40d41
4 changed files with 7 additions and 3 deletions
|
@ -118,6 +118,8 @@ json_string_len (struct sprinter *sp, const char *val, size_t len)
|
||||||
static void
|
static void
|
||||||
json_string (struct sprinter *sp, const char *val)
|
json_string (struct sprinter *sp, const char *val)
|
||||||
{
|
{
|
||||||
|
if (val == NULL)
|
||||||
|
val = "";
|
||||||
json_string_len (sp, val, strlen (val));
|
json_string_len (sp, val, strlen (val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,8 @@ text_string_len (struct sprinter *sp, const char *val, size_t len)
|
||||||
static void
|
static void
|
||||||
text_string (struct sprinter *sp, const char *val)
|
text_string (struct sprinter *sp, const char *val)
|
||||||
{
|
{
|
||||||
|
if (val == NULL)
|
||||||
|
val = "";
|
||||||
text_string_len (sp, val, strlen (val));
|
text_string_len (sp, val, strlen (val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,9 @@ typedef struct sprinter {
|
||||||
* a list or map, followed or preceded by separators). For string
|
* a list or map, followed or preceded by separators). For string
|
||||||
* and string_len, the char * must be UTF-8 encoded. string_len
|
* and string_len, the char * must be UTF-8 encoded. string_len
|
||||||
* allows non-terminated strings and strings with embedded NULs
|
* allows non-terminated strings and strings with embedded NULs
|
||||||
* (though the handling of the latter is format-dependent).
|
* (though the handling of the latter is format-dependent). For
|
||||||
|
* string (but not string_len) the string pointer passed may be
|
||||||
|
* NULL.
|
||||||
*/
|
*/
|
||||||
void (*string) (struct sprinter *, const char *);
|
void (*string) (struct sprinter *, const char *);
|
||||||
void (*string_len) (struct sprinter *, const char *, size_t);
|
void (*string_len) (struct sprinter *, const char *, size_t);
|
||||||
|
|
|
@ -29,7 +29,6 @@ thread:XXX 2001-01-05 [1/1] (null); (inbox unread)
|
||||||
thread:XXX 1970-01-01 [1/1] Notmuch Test Suite; (inbox unread)"
|
thread:XXX 1970-01-01 [1/1] Notmuch Test Suite; (inbox unread)"
|
||||||
|
|
||||||
test_begin_subtest "Search: json"
|
test_begin_subtest "Search: json"
|
||||||
test_subtest_known_broken
|
|
||||||
output=$(notmuch search --format=json '*' | notmuch_search_sanitize)
|
output=$(notmuch search --format=json '*' | notmuch_search_sanitize)
|
||||||
test_expect_equal_json "$output" '
|
test_expect_equal_json "$output" '
|
||||||
[
|
[
|
||||||
|
@ -93,7 +92,6 @@ Body
|
||||||
message}"
|
message}"
|
||||||
|
|
||||||
test_begin_subtest "Show: json"
|
test_begin_subtest "Show: json"
|
||||||
test_subtest_known_broken
|
|
||||||
output=$(notmuch show --format=json '*' | notmuch_json_show_sanitize)
|
output=$(notmuch show --format=json '*' | notmuch_json_show_sanitize)
|
||||||
test_expect_equal_json "$output" '
|
test_expect_equal_json "$output" '
|
||||||
[
|
[
|
||||||
|
|
Loading…
Reference in a new issue