From 5dd9a6792b4266006cb8b283e6e5996bbd5026a7 Mon Sep 17 00:00:00 2001 From: Rainer Gerhards Date: Wed, 27 Feb 2008 15:01:53 +0000 Subject: bugfix: object property deserializer did not handle negative numbers --- obj.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'obj.c') diff --git a/obj.c b/obj.c index 5e0fd278..29fc65ec 100644 --- a/obj.c +++ b/obj.c @@ -339,16 +339,27 @@ finalize_it: /* define a helper to make code below a bit cleaner (and quicker to write) */ #define NEXTC CHKiRet(strmReadChar(pStrm, &c))//;dbgprintf("c: %c\n", c); -/* de-serialize an (long) integer */ +/* de-serialize a number */ static rsRetVal objDeserializeNumber(number_t *pNum, strm_t *pStrm) { DEFiRet; number_t i; + int bIsNegative; uchar c; assert(pNum != NULL); NEXTC; + if(c == '-') { + bIsNegative = 1; + NEXTC; + } else { + bIsNegative = 0; + } + + /* we check this so that we get more meaningful error codes */ + if(!isdigit(c)) ABORT_FINALIZE(RS_RET_INVALID_NUMBER); + i = 0; while(isdigit(c)) { i = i * 10 + c - '0'; @@ -357,6 +368,9 @@ static rsRetVal objDeserializeNumber(number_t *pNum, strm_t *pStrm) if(c != ':') ABORT_FINALIZE(RS_RET_INVALID_DELIMITER); + if(bIsNegative) + i *= -1; + *pNum = i; finalize_it: RETiRet; -- cgit