jansson: When parsing, ignore fractional parts of times
This commit is contained in:
@@ -116,6 +116,17 @@ err:
|
||||
tmpl->key = tmp; \
|
||||
} while(0)
|
||||
|
||||
#define GETNUM_T(key, type) do { \
|
||||
GET(key, number); \
|
||||
const double tmpd = json_number_value(v); \
|
||||
const type tmp = tmpd; \
|
||||
/* This checks if it's merely being truncated, and tolerates it */ \
|
||||
if (tmpd != tmp && !((tmpd < 0) ? (tmpd < tmp && tmpd + 1 > tmp) : (tmpd > tmp && tmpd - 1 < tmp))) { \
|
||||
return "Invalid number value for '" #key "'"; \
|
||||
} \
|
||||
tmpl->key = tmp; \
|
||||
} while(0)
|
||||
|
||||
#define GETNUM_O2(key, skey, type) do { \
|
||||
if ((v = json_object_get(json, #skey)) && json_is_number(v)) { \
|
||||
const double tmpd = json_number_value(v); \
|
||||
@@ -128,6 +139,17 @@ err:
|
||||
|
||||
#define GETNUM_O(key, type) GETNUM_O2(key, key, type)
|
||||
|
||||
#define GETNUM_OT(key, type) do { \
|
||||
if ((v = json_object_get(json, #key)) && json_is_number(v)) { \
|
||||
const double tmpd = json_number_value(v); \
|
||||
const type tmp = tmpd; \
|
||||
/* This checks if it's merely being truncated, and tolerates it */ \
|
||||
if (tmpd == tmp || ((tmpd < 0) ? (tmpd < tmp && tmpd + 1 > tmp) : (tmpd > tmp && tmpd - 1 < tmp))) { \
|
||||
tmpl->key = tmp; \
|
||||
} \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define GETSTR(key, skey) do { \
|
||||
if ((v = json_object_get(json, #key)) && json_is_string(v)) \
|
||||
if (!(tmpl->skey = strdup(json_string_value(v)))) \
|
||||
@@ -192,7 +214,7 @@ const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t
|
||||
|
||||
GETHEX(bits, diffbits);
|
||||
my_flip(tmpl->diffbits, 4);
|
||||
GETNUM(curtime, blktime_t);
|
||||
GETNUM_T(curtime, blktime_t);
|
||||
GETNUM(height, blkheight_t);
|
||||
GETHEX(previousblockhash, prevblk);
|
||||
my_flip(tmpl->prevblk, 32);
|
||||
@@ -204,11 +226,11 @@ const char *blktmpl_add_jansson(blktemplate_t *tmpl, const json_t *json, time_t
|
||||
|
||||
GETSTR(workid, workid);
|
||||
|
||||
GETNUM_O(expires, int16_t);
|
||||
GETNUM_O(maxtime, blktime_t);
|
||||
GETNUM_O(maxtimeoff, blktime_diff_t);
|
||||
GETNUM_O(mintime, blktime_t);
|
||||
GETNUM_O(mintimeoff, blktime_diff_t);
|
||||
GETNUM_OT(expires, int16_t);
|
||||
GETNUM_OT(maxtime, blktime_t);
|
||||
GETNUM_OT(maxtimeoff, blktime_diff_t);
|
||||
GETNUM_OT(mintime, blktime_t);
|
||||
GETNUM_OT(mintimeoff, blktime_diff_t);
|
||||
|
||||
GETSTR(longpollid, lp.id);
|
||||
GETSTR(longpolluri, lp.uri);
|
||||
|
||||
Reference in New Issue
Block a user