[PATCH 2/2] sprinter: change integer method to use int64_t
Peter Wang
novalazy at gmail.com
Fri Feb 7 17:49:22 PST 2020
In particular, timestamps beyond 2038 could overflow the sprinter
interface on systems where time_t is 64-bit but 'int' is a signed 32-bit
integer type.
---
sprinter-json.c | 5 +++--
sprinter-sexp.c | 5 +++--
sprinter-text.c | 5 +++--
sprinter.h | 2 +-
test/T160-json.sh | 1 -
5 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/sprinter-json.c b/sprinter-json.c
index c6ec8577..273bdeca 100644
--- a/sprinter-json.c
+++ b/sprinter-json.c
@@ -1,3 +1,4 @@
+#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#include <talloc.h>
@@ -124,11 +125,11 @@ json_string (struct sprinter *sp, const char *val)
}
static void
-json_integer (struct sprinter *sp, int val)
+json_integer (struct sprinter *sp, int64_t val)
{
struct sprinter_json *spj = json_begin_value (sp);
- fprintf (spj->stream, "%d", val);
+ fprintf (spj->stream, "%"PRId64, val);
}
static void
diff --git a/sprinter-sexp.c b/sprinter-sexp.c
index 6891ea42..35c007d5 100644
--- a/sprinter-sexp.c
+++ b/sprinter-sexp.c
@@ -18,6 +18,7 @@
* Author: Peter Feigl <peter.feigl at gmx.at>
*/
+#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#include <talloc.h>
@@ -161,11 +162,11 @@ sexp_keyword (struct sprinter *sp, const char *val)
}
static void
-sexp_integer (struct sprinter *sp, int val)
+sexp_integer (struct sprinter *sp, int64_t val)
{
struct sprinter_sexp *sps = sexp_begin_value (sp);
- fprintf (sps->stream, "%d", val);
+ fprintf (sps->stream, "%"PRId64, val);
}
static void
diff --git a/sprinter-text.c b/sprinter-text.c
index 648b54b1..7b68f98c 100644
--- a/sprinter-text.c
+++ b/sprinter-text.c
@@ -1,3 +1,4 @@
+#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#include <talloc.h>
@@ -44,11 +45,11 @@ text_string (struct sprinter *sp, const char *val)
}
static void
-text_integer (struct sprinter *sp, int val)
+text_integer (struct sprinter *sp, int64_t val)
{
struct sprinter_text *sptxt = (struct sprinter_text *) sp;
- fprintf (sptxt->stream, "%d", val);
+ fprintf (sptxt->stream, "%"PRId64, val);
}
static void
diff --git a/sprinter.h b/sprinter.h
index 182b1a8b..528d8a2d 100644
--- a/sprinter.h
+++ b/sprinter.h
@@ -33,7 +33,7 @@ typedef struct sprinter {
*/
void (*string)(struct sprinter *, const char *);
void (*string_len)(struct sprinter *, const char *, size_t);
- void (*integer)(struct sprinter *, int);
+ void (*integer)(struct sprinter *, int64_t);
void (*boolean)(struct sprinter *, bool);
void (*null)(struct sprinter *);
diff --git a/test/T160-json.sh b/test/T160-json.sh
index ec1b5adb..d975efa7 100755
--- a/test/T160-json.sh
+++ b/test/T160-json.sh
@@ -65,7 +65,6 @@ test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
\"unread\"]}]"
test_begin_subtest "Search message: json, 64-bit timestamp"
-test_subtest_known_broken
add_message "[subject]=\"json-search-64bit-timestamp-subject\"" "[date]=\"Tue, 01 Jan 2999 12:00:00 -0000\"" "[body]=\"json-search-64bit-timestamp-message\""
output=$(notmuch search --format=json "json-search-64bit-timestamp-message" | notmuch_search_sanitize)
test_expect_equal_json "$output" "[{\"thread\": \"XXX\",
--
2.25.0
More information about the notmuch
mailing list