summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Brewer <jzb0012@auburn.edu>2018-05-17 20:19:12 -0500
committerJustin Brewer <jzb0012@auburn.edu>2018-05-21 10:49:30 -0500
commitef4256670f2c23bd3de3963c0dc4882599ac3300 (patch)
tree2f588a9ef983c1b8280ed48a1eba90782f8028f1
parent33a36dc25b34bdc2abf02b5dbe21ec72712297b4 (diff)
Update createArray to take size_t
This makes createArray consistent with createString, which also takes size_t. Bounds-check and unit tests are updated to allow up to min(SIZE_MAX,LLONG_MAX). Changelog is updated to mention this API break. Signed-off-by: Justin Brewer <jzb0012@auburn.edu>
-rw-r--r--CHANGELOG.md2
-rw-r--r--hiredis.c4
-rw-r--r--read.c2
-rw-r--r--read.h2
-rw-r--r--test.c4
5 files changed, 8 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f40ec53..7fa7c48 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,8 @@
User code should compare this to `size_t` values as well.
If it was used to compare to other values, casting might be necessary or can be removed, if casting was applied before.
+* `redisReplyObjectFunctions.createArray` now takes `size_t` for its length parameter.
+
* Remove backwards compatibility macro's
This removes the following old function aliases, use the new name now:
diff --git a/hiredis.c b/hiredis.c
index 98f43c9..745c2f9 100644
--- a/hiredis.c
+++ b/hiredis.c
@@ -45,7 +45,7 @@
static redisReply *createReplyObject(int type);
static void *createStringObject(const redisReadTask *task, char *str, size_t len);
-static void *createArrayObject(const redisReadTask *task, int elements);
+static void *createArrayObject(const redisReadTask *task, size_t elements);
static void *createIntegerObject(const redisReadTask *task, long long value);
static void *createNilObject(const redisReadTask *task);
@@ -129,7 +129,7 @@ static void *createStringObject(const redisReadTask *task, char *str, size_t len
return r;
}
-static void *createArrayObject(const redisReadTask *task, int elements) {
+static void *createArrayObject(const redisReadTask *task, size_t elements) {
redisReply *r, *parent;
r = createReplyObject(REDIS_REPLY_ARRAY);
diff --git a/read.c b/read.c
index ef483f7..8e9f8bf 100644
--- a/read.c
+++ b/read.c
@@ -385,7 +385,7 @@ static int processMultiBulkItem(redisReader *r) {
root = (r->ridx == 0);
- if (elements < -1 || elements > INT_MAX) {
+ if (elements < -1 || (LLONG_MAX > SIZE_MAX && elements > SIZE_MAX)) {
__redisReaderSetError(r,REDIS_ERR_PROTOCOL,
"Multi-bulk length out of range");
return REDIS_ERR;
diff --git a/read.h b/read.h
index 2988aa4..ec91e72 100644
--- a/read.h
+++ b/read.h
@@ -71,7 +71,7 @@ typedef struct redisReadTask {
typedef struct redisReplyObjectFunctions {
void *(*createString)(const redisReadTask*, char*, size_t);
- void *(*createArray)(const redisReadTask*, int);
+ void *(*createArray)(const redisReadTask*, size_t);
void *(*createInteger)(const redisReadTask*, long long);
void *(*createNil)(const redisReadTask*);
void (*freeObject)(void*);
diff --git a/test.c b/test.c
index 0f5bfe5..064abae 100644
--- a/test.c
+++ b/test.c
@@ -358,7 +358,8 @@ static void test_reply_reader(void) {
freeReplyObject(reply);
redisReaderFree(reader);
- test("Set error when array > INT_MAX: ");
+#if LLONG_MAX > SIZE_MAX
+ test("Set error when array > SIZE_MAX: ");
reader = redisReaderCreate();
redisReaderFeed(reader, "*9223372036854775807\r\n+asdf\r\n",29);
ret = redisReaderGetReply(reader,&reply);
@@ -367,7 +368,6 @@ static void test_reply_reader(void) {
freeReplyObject(reply);
redisReaderFree(reader);
-#if LLONG_MAX > SIZE_MAX
test("Set error when bulk > SIZE_MAX: ");
reader = redisReaderCreate();
redisReaderFeed(reader, "$9223372036854775807\r\nasdf\r\n",28);