mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +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
|
||||
json_string (struct sprinter *sp, const char *val)
|
||||
{
|
||||
if (val == NULL)
|
||||
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
|
||||
text_string (struct sprinter *sp, const char *val)
|
||||
{
|
||||
if (val == NULL)
|
||||
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
|
||||
* and string_len, the char * must be UTF-8 encoded. string_len
|
||||
* 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_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)"
|
||||
|
||||
test_begin_subtest "Search: json"
|
||||
test_subtest_known_broken
|
||||
output=$(notmuch search --format=json '*' | notmuch_search_sanitize)
|
||||
test_expect_equal_json "$output" '
|
||||
[
|
||||
|
@ -93,7 +92,6 @@ Body
|
|||
message}"
|
||||
|
||||
test_begin_subtest "Show: json"
|
||||
test_subtest_known_broken
|
||||
output=$(notmuch show --format=json '*' | notmuch_json_show_sanitize)
|
||||
test_expect_equal_json "$output" '
|
||||
[
|
||||
|
|
Loading…
Reference in a new issue