From f29e384853660434da912c49e8b29ebabe76bec3 Mon Sep 17 00:00:00 2001 From: antirez Date: Wed, 7 Oct 2015 22:27:18 +0200 Subject: [PATCH] Fix extractLongLatOrReply() sanity check conditionals. the check for lat/long valid ranges were performed inside the for loop, two times instead of one, and the first time when the second element of the array, xy[1], was yet not populated. This resulted into issue #2799. Close issue #2799. --- src/geo.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/geo.c b/src/geo.c index daff0dd9e..560c34109 100644 --- a/src/geo.c +++ b/src/geo.c @@ -89,19 +89,19 @@ int decodeGeohash(double bits, double *xy) { /* Input Argument Helper */ /* Take a pointer to the latitude arg then use the next arg for longitude. * On parse error C_ERR is returned, otherwise C_OK. */ -int extractLongLatOrReply(client *c, robj **argv, - double *xy) { - for (int i = 0; i < 2; i++) { +int extractLongLatOrReply(client *c, robj **argv, double *xy) { + int i; + for (i = 0; i < 2; i++) { if (getDoubleFromObjectOrReply(c, argv[i], xy + i, NULL) != C_OK) { return C_ERR; } - if (xy[0] < GEO_LONG_MIN || xy[0] > GEO_LONG_MAX || - xy[1] < GEO_LAT_MIN || xy[1] > GEO_LAT_MAX) { - addReplySds(c, sdscatprintf(sdsempty(), - "-ERR invalid longitude,latitude pair %f,%f\r\n",xy[0],xy[1])); - return C_ERR; - } + } + if (xy[0] < GEO_LONG_MIN || xy[0] > GEO_LONG_MAX || + xy[1] < GEO_LAT_MIN || xy[1] > GEO_LAT_MAX) { + addReplySds(c, sdscatprintf(sdsempty(), + "-ERR invalid longitude,latitude pair %f,%f\r\n",xy[0],xy[1])); + return C_ERR; } return C_OK; }