8000 Merge remote-tracking branch 'remicollet/issue-225' into develop · jrtkcoder/phpredis@02a67d5 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 02a67d5

Browse files
Merge remote-tracking branch 'remicollet/issue-225' into develop
2 parents b984187 + b9a16b5 commit 02a67d5

File tree

3 files changed

+37
-26
lines changed

3 files changed

+37
-26
lines changed

library.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ PHPAPI void redis_client_list_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSock *red
743743
char *p = resp, *lpos = resp, *kpos = NULL, *vpos = NULL, *p2, *key, *value;
744744

745745
// Key length, done flag
746-
int klen, done = 0, is_numeric;
746+
int klen = 0, done = 0, is_numeric;
747747

748748
// While we've got more to parse
749749
while(!done) {
@@ -774,8 +774,8 @@ PHPAPI void redis_client_list_reply(INTERNAL_FUNCTION_PARAMETERS, RedisSock *red
774774

775775
// Treat numbers as numbers, strings as strings
776776
is_numeric = 1;
777-
for(p2 = value; *p; ++p) {
778-
if(*p < '0' || *p > '9') {
777+
for(p2 = value; *p2; ++p2) {
778+
if(*p2 < '0' || *p2 > '9') {
779779
is_numeric = 0;
780780
break;
781781
}
@@ -1538,8 +1538,10 @@ redis_serialize(RedisSock *redis_sock, zval *z, char **val, int *val_len TSRMLS_
15381538
#endif
15391539
smart_str sstr = {0};
15401540
zval *z_copy;
1541+
#ifdef HAVE_REDIS_IGBINARY
15411542
size_t sz;
15421543
uint8_t *val8;
1544+
#endif
15431545

15441546
switch(redis_sock->serializer) {
15451547
case REDIS_SERIALIZER_NONE:

package.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ http://pear.php.net/dtd/package-2.0.xsd">
7171
<file role='src' name='redis.c'/>
7272
<file role='src' name='redis_session.c'/>
7373
<file role='src' name='redis_session.h'/>
74+
<dir name='tests'>
75+
<file role='test' name='array-tests.php' />
76+
<file role='test' name='memory.php' />
77+
<file role='test' name='mkring.sh' />
78+
<file role='test' name='test.php' />
79+
<file role='test' name='TestRedis.php' />
80+
</dir> <!-- tests -->
7481
</dir> <!-- / -->
7582
</contents>
7683
<dependencies>

redis.c

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,7 @@ PHP_METHOD(Redis, set) {
990990

991991
/* Free our key or value if we prefixed/serialized */
992992
if(key_free) efree(key);
993-
if(val_free) efree(val);
993+
if(val_free) STR_FREE(val);
994994

995995
/* Kick off the command */
996996
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -1023,7 +1023,7 @@ PHPAPI void redis_generic_setex(INTERNAL_FUNCTION_PARAMETERS, char *keyword) {
10231023
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
10241024
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
10251025
cmd_len = redis_cmd_format_static(& 6D4E cmd, keyword, "sls", key, key_len, expire, val, val_len);
1026-
if(val_free) efree(val);
1026+
if(val_free) STR_FREE(val);
10271027
if(key_free) efree(key);
10281028

10291029
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -1072,7 +1072,7 @@ PHP_METHOD(Redis, setnx)
10721072
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
10731073
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
10741074
cmd_len = redis_cmd_format_static(&cmd, "SETNX", "ss", key, key_len, val, val_len);
1075-
if(val_free) efree(val);
1075+
if(val_free) STR_FREE(val);
10761076
if(key_free) efree(key);
10771077

10781078
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -1110,7 +1110,7 @@ PHP_METHOD(Redis, getSet)
11101110
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
11111111
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
11121112
cmd_len = redis_cmd_format_static(&cmd, "GETSET", "ss", key, key_len, val, val_len);
1113-
if(val_free) efree(val);
1113+
if(val_free) STR_FREE(val);
11141114
if(key_free) efree(key);
11151115

11161116
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -1928,7 +1928,7 @@ generic_push_function(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int keyword_l
19281928
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
19291929
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
19301930
cmd_len = redis_cmd_format_static(&cmd, keyword, "ss", key, key_len, val, val_len);
1931-
if(val_free) efree(val);
1931+
if(val_free) STR_FREE(val);
19321932
if(key_free) efree(key);
19331933

19341934
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -2004,9 +2004,9 @@ PHP_METHOD(Redis, lInsert)
20042004
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
20052005
pivot_free = redis_serialize(redis_sock, z_pivot, &pivot, &pivot_len TSRMLS_CC);
20062006
cmd_len = redis_cmd_format_static(&cmd, "LINSERT", "ssss", key, key_len, position, position_len, pivot, pivot_len, val, val_len);
2007-
if(val_free) efree(val);
2007+
if(val_free) STR_FREE(val);
20082008
if(key_free) efree(key);
2009-
if(pivot_free) efree(pivot);
2009+
if(pivot_free) STR_FREE(pivot);
20102010

20112011
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
20122012
IF_ATOMIC() {
@@ -2178,7 +2178,7 @@ PHP_METHOD(Redis, lRemove)
21782178
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
21792179
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
21802180
cmd_len = redis_cmd_format_static(&cmd, "LREM", "sds", key, key_len, count, val, val_len);
2181-
if(val_free) efree(val);
2181+
if(val_free) STR_FREE(val);
21822182
if(key_free) efree(key);
21832183

21842184
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -2382,7 +2382,7 @@ PHP_METHOD(Redis, sMove)
23822382
src_free = redis_key_prefix(redis_sock, &src, &src_len TSRMLS_CC);
23832383
dst_free = redis_key_prefix(redis_sock, &dst, &dst_len TSRMLS_CC);
23842384
cmd_len = redis_cmd_format_static(&cmd, "SMOVE", "sss", src, src_len, dst, dst_len, val, val_len);
2385-
if(val_free) efree(val);
2385+
if(val_free) STR_FREE(val);
23862386
if(src_free) efree(src);
23872387
if(dst_free) efree(dst);
23882388

@@ -2488,7 +2488,7 @@ PHP_METHOD(Redis, sContains)
24882488
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
24892489
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
24902490
cmd_len = redis_cmd_format_static(&cmd, "SISMEMBER", "ss", key, key_len, val, val_len);
2491-
if(val_free) efree(val);
2491+
if(val_free) STR_FREE(val);
24922492
if(key_free) efree(key);
24932493

24942494
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -2716,7 +2716,7 @@ PHPAPI int generic_multiple_args_cmd(INTERNAL_FUNCTION_PARAMETERS, char *keyword
27162716
/* cleanup prefixed keys. */
27172717
for(i = 0; i < real_argc + (has_timeout?-1:0); ++i) {
27182718
if(keys_to_free[i])
2719-
efree(keys[i]);
2719+
STR_FREE(keys[i]);
27202720
}
27212721
if(single_array && has_timeout) { /* cleanup string created to contain timeout value */
27222722
efree(keys[real_argc-1]);
@@ -3362,7 +3362,7 @@ PHP_METHOD(Redis, lSet) {
33623362
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
33633363
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
33643364
cmd_len = redis_cmd_format_static(&cmd, "LSET", "sds", key, key_len, index, val, val_len);
3365-
if(val_free) efree(val);
3365+
if(val_free) STR_FREE(val);
33663366
if(key_free) efree(key);
33673367

33683368
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -3782,7 +3782,7 @@ generic_mset(INTERNAL_FUNCTION_PARAMETERS, char *kw, void (*fun)(INTERNAL_FUNCTI
37823782
memcpy(p, _NL, 2); p += 2;
37833783
}
37843784

3785-
if(val_free) efree(val);
3785+
if(val_free) STR_FREE(val);
37863786
if(key_free) efree(key);
37873787
}
37883788
}
@@ -3964,7 +3964,7 @@ PHP_METHOD(Redis, zAdd) {
39643964
smart_str_appendl(&buf, val, val_len);
39653965
smart_str_appendl(&buf, _NL, sizeof(_NL) - 1);
39663966

3967-
if(val_free) efree(val);
3967+
if(val_free) STR_FREE(val);
39683968
}
39693969

39703970
/* end string */
@@ -4361,7 +4361,7 @@ PHP_METHOD(Redis, zScore)
43614361
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
43624362
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
43634363
cmd_len = redis_cmd_format_static(&cmd, "ZSCORE", "ss", key, key_len, val, val_len);
4364-
if(val_free) efree(val);
4364+
if(val_free) STR_FREE(val);
43654365
if(key_free) efree(key);
43664366

43674367
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -4394,7 +4394,7 @@ PHPAPI void generic_rank_method(INTERNAL_FUNCTION_PARAMETERS, char *keyword, int
43944394
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
43954395
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
43964396
cmd_len = redis_cmd_format_static(&cmd, keyword, "ss", key, key_len, val, val_len);
4397-
if(val_free) efree(val);
4397+
if(val_free) STR_FREE(val);
43984398
if(key_free) efree(key);
43994399

44004400
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -4444,7 +4444,7 @@ PHPAPI void generic_incrby_method(INTERNAL_FUNCTION_PARAMETERS, char *keyword, i
44444444
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
44454445
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
44464446
cmd_len = redis_cmd_format_static(&cmd, keyword, "sfs", key, key_len, add, val, val_len);
4447-
if(val_free) efree(val);
4447+
if(val_free) STR_FREE(val);
44484448
if(key_free) efree(key);
44494449

44504450
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -4659,7 +4659,7 @@ generic_hset(INTERNAL_FUNCTION_PARAMETERS, char *kw, void (*fun)(INTERNAL_FUNCTI
46594659
val_free = redis_serialize(redis_sock, z_value, &val, &val_len TSRMLS_CC);
46604660
key_free = redis_key_prefix(redis_sock, &key, &key_len TSRMLS_CC);
46614661
cmd_len = redis_cmd_format_static(&cmd, kw, "sss", key, key_len, member, member_len, val, val_len);
4662-
if(val_free) efree(val);
4662+
if(val_free) STR_FREE(val);
46634663
if(key_free) efree(key);
46644664

46654665
REDIS_PROCESS_REQUEST(redis_sock, cmd, cmd_len);
@@ -5179,7 +5179,7 @@ PHP_METHOD(Redis, hMset)
51795179
redis_cmd_append_sstr(&set_cmds, hkey, hkey_len - 1);
51805180
redis_cmd_append_sstr(&set_cmds, hval, hval_len);
51815181

5182-
if(hval_free) efree(hval);
5182+
if(hval_free) STR_FREE(hval);
51835183
}
51845184

51855185
// Now construct the entire command
@@ -6685,7 +6685,7 @@ PHP_METHOD(Redis, _serialize) {
66856685
RedisSock *redis_sock;
66866686
zval *z_val;
66876687
char *val;
6688-
int val_free, val_len;
6688+
int val_len;
66896689

66906690
// Parse arguments
66916691
if(zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oz",
@@ -6700,10 +6700,11 @@ PHP_METHOD(Redis, _serialize) {
67006700
}
67016701

67026702
// Serialize, which will return a value even if no serializer is set
6703-
val_free = redis_serialize(redis_sock, z_val, &val, &val_len TSRMLS_CC);
6703+
redis_serialize(redis_sock, z_val, &val, &val_len TSRMLS_CC);
67046704

6705-
// Return serialized value. Tell PHP to make a copy if redis_serialize didn't.
6706-
RETURN_STRINGL(val, val_len, !val_free);
6705+
// Return serialized value. Tell PHP to make a copy as some can be interned.
6706+
RETVAL_STRINGL(val, val_len, 1);
6707+
STR_FREE(val);
67076708
}
67086709

67096710
/*
@@ -7014,6 +7015,7 @@ redis_build_scan_cmd(char **cmd, REDIS_SCAN_TYPE type, char *key, int key_len,
70147015
keyword = "HSCAN";
70157016
break;
70167017
case TYPE_ZSCAN:
7018+
default:
70177019
keyword = "ZSCAN";
70187020
break;
70197021
}

0 commit comments

Comments
 (0)
0