Skip to content

[pull] develop from phpredis:develop #8

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 158 commits into
base: develop
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
158 commits
Select commit Hold shift + click to select a range
6dc0a0b
Fix segfault when passing just false to auth.
michael-grunder Jan 8, 2024
3fdd52b
Fix the time unit of retry_interval
woodongwong Jan 16, 2024
14f9333
fix: RedisCluster::publish returns a cluster_long_resp
PROFeNoM Jan 16, 2024
a4a283a
Change exec return method type hint
michael-grunder Oct 30, 2023
5d29324
Fix Redis::mget signature
yatsukhnenko Nov 23, 2023
8f8ff72
Update zCount argument type in redis.stub.php (#2439)
taka-oyama Jan 24, 2024
142c1f4
Fix retry_internal documentation
SplotyCode Feb 13, 2024
ed7c9f6
Implement WAITAOF command.
michael-grunder Feb 13, 2024
9b90c03
Update WAITAOF test to use different assertion + add debug info
michael-grunder Feb 20, 2024
37c5f8d
Fix typos
szepeviktor Feb 17, 2024
732e466
Improve warning when we encounter an invalid EXPIRY in SET
michael-grunder Feb 21, 2024
77ab62b
Tighter return types for Redis::(keys|hKeys|hVals|hGetAll)()
BenMorel Feb 17, 2024
ece3f7b
Fix config.m4 when using custom dep paths (#2453)
michael-grunder Mar 5, 2024
4d23397
Update stubs
michael-grunder Mar 13, 2024
fa1a283
Fix some typos
michael-grunder Mar 13, 2024
e52f0af
Update SCAN to handle very large cursor values.
michael-grunder Mar 15, 2024
2612d44
Update RedisCluster scan logic for large SCAN cursors.
michael-grunder Mar 18, 2024
a51215c
Update random includes.
michael-grunder Mar 18, 2024
3dbc2bd
Don't use deprecated string interpolation syntax.
michael-grunder Mar 17, 2024
8a39cae
add: session.save_path examples
tuxmartin Mar 30, 2023
a9e53fd
Fix segfault and remove redundant macros
yatsukhnenko Mar 21, 2024
f358687
Merge pull request #2467 from phpredis/multi-exec-segfault
yatsukhnenko Mar 21, 2024
c7a73ab
Remove mention of pickle
acorncom Mar 21, 2024
d9c48b7
KeyDB: Get our tests passing against KeyDB.
michael-grunder Mar 21, 2024
54d62c7
Add KeyDB to CI
michael-grunder Mar 22, 2024
37fa359
Mention KeyDB support in README.md
tstarling Mar 24, 2024
50e5405
Fix Arginfo / zpp mismatch for DUMP command
yatsukhnenko Mar 25, 2024
8323ddf
Merge pull request #2471 from phpredis/dump-arginfo-zpp-mismatch
yatsukhnenko Mar 25, 2024
eb7f31e
Fix random connection timeouts with Redis Cluster
kjoe Mar 17, 2024
b698901
Support for early_refresh in Redis sessions to match cluster behavior
bitactive Mar 28, 2024
a819a44
Test against valkey
michael-grunder Apr 6, 2024
5996597
Add a CI step that waits for server instances before running tests
michael-grunder Apr 7, 2024
5f1eecf
Mention Valkey support
PlavorSeol Apr 8, 2024
da4ab0a
Add compression support for PHP Sessions (#2473)
bitactive Apr 8, 2024
dc39bd5
Remove 7.2 and 7.3 from CI. (#2478)
michael-grunder Apr 8, 2024
2b555c8
Minor session compression cleanup.
michael-grunder Apr 8, 2024
9f3ca98
Add a test for session compression.
michael-grunder Apr 9, 2024
0e92616
Fix memory leak if we fail in ps_open_redis.
michael-grunder Apr 6, 2024
3d7be35
Consolidate failure path
michael-grunder Apr 7, 2024
f350dc3
Test aginst the first stable version of valkey.
michael-grunder Apr 16, 2024
c0d6f04
Minor improvements to some session tests.
michael-grunder May 9, 2024
0f94d9c
Relax timing test slightly
michael-grunder May 10, 2024
f865d5b
fix missing <code> tags
divinity76 May 8, 2024
34b5bd8
Rework how we declare ZSTD min/max constants.
michael-grunder May 14, 2024
d68c30f
Remove Windows PHP 7.x jobs
michael-grunder May 16, 2024
b88e72b
Refactor session tests (#2492)
michael-grunder May 23, 2024
18b0da7
Update unit test assertions.
michael-grunder May 24, 2024
3c125b0
More unit test cleanup.
michael-grunder May 28, 2024
e18f6c6
Minor refactor
michael-grunder May 29, 2024
0d89e92
Spelling fixes
michael-grunder May 29, 2024
78b70ca
More test refactoring.
michael-grunder May 30, 2024
c6cd665
Code formatting
michael-grunder May 30, 2024
dab6a62
Code formatting
michael-grunder May 30, 2024
c139de3
We don't need to use a ranom value for our ECHO liveness challenge.
michael-grunder Jun 1, 2024
f8c762e
Use ZEND_STRL where appropriate.
michael-grunder Jun 1, 2024
d3b2d87
Don't use `$k1` as a variable name.
michael-grunder Jun 2, 2024
7050c98
Play around with more ZEND_STRL usage (#2505)
michael-grunder Jun 15, 2024
b808cc6
Update tests so they can run in php-cgi.
michael-grunder Jun 17, 2024
b1771de
More unit test utility functions/usage. (#2509)
michael-grunder Jun 18, 2024
5730497
PHP might throw a fatal error if we send no args to exists (#2510)
michael-grunder Jun 18, 2024
7c55142
Refactor redis_script_cmd
yatsukhnenko Jun 20, 2024
74f9e80
Merge pull request #2513 from phpredis/script-command
yatsukhnenko Jun 20, 2024
981c693
Add `GETEX` to README docs + minor change to command.
michael-grunder Jun 20, 2024
7de29d5
Fix a macOS (M1) compiler warning.
michael-grunder Jul 8, 2024
50529f5
Context array should be nullable
michael-grunder Jul 10, 2024
eeb5109
Update documentation (#2523)
kalifg Jul 12, 2024
99f9fd8
Fix HRANDFIELD command when WITHVALUES is used. (#2524)
michael-grunder Jul 14, 2024
6673b5b
SRANDMEMBER can return any type because of serialization.
michael-grunder Jul 14, 2024
6ea5b3e
Fix argument count issue in HSET with associative array, update metho…
crocodele Jul 17, 2024
ff3d5e3
Prepare to tag 6.1.0RC1
michael-grunder Jul 30, 2024
e9474b8
add missing SessionHelpers.php in pecl package
remicollet Aug 5, 2024
8b51942
Raise minimum supported PHP version to 7.4
michael-grunder Aug 5, 2024
37cebdd
cleanup code for unsupported versions
remicollet Aug 5, 2024
40c8973
Remove erroneously duplicated changelog entries.
michael-grunder Aug 5, 2024
9d38050
Upload artifact v2 is deprecated
michael-grunder Sep 19, 2024
a75a7e5
Fix SIGABRT in PHP 8.4
michael-grunder Sep 19, 2024
b59e35a
Added a composer.json to enable support for PIE
asgrim Sep 18, 2024
9bd2aaa
Prepare for 6.1.0RC2
michael-grunder Sep 23, 2024
30c8f90
bump version
remicollet Sep 23, 2024
bff3a22
fix implicit nullable (8.4)
remicollet Sep 23, 2024
909c5cc
Finalize 6.1.0RC2 changelog for completeness. (#2554)
michael-grunder Sep 23, 2024
0bae4bb
Fix urls
VincentLanglet Sep 23, 2024
cc1be32
fix 2 tests with redis 6.2
remicollet Sep 24, 2024
5f241d8
Merge pull request #2555 from phpredis/issue-redis62
remicollet Sep 24, 2024
f89d4d8
Windows CI: update setup-php-sdk to v0.10 and enable caching
cmb69 Sep 30, 2024
52e69ed
improve package summary and description (#2558)
remicollet Oct 3, 2024
5419cc9
Prepare for 6.1.0 GA
michael-grunder Oct 3, 2024
a53bf38
Merge pull request #2557 from cmb69/cmb/win-ci
yatsukhnenko Oct 8, 2024
985b031
KeyDB doesn't have a noble release yet.
michael-grunder Oct 14, 2024
eb66fc9
Pin ubuntu version for KeyDB
michael-grunder Oct 14, 2024
085d61e
Create a strncmp wrapper
michael-grunder Oct 14, 2024
0fe45d2
Fix XAUTOCLAIM argc when sending COUNT
michael-grunder Oct 16, 2024
8144db3
better documentation for the $tlsOptions parameter of RedisCluster
JacobBrownAustin Nov 4, 2024
4cd3f59
Implement KeyDB's EXPIREMEMBER[AT] commands
michael-grunder Nov 15, 2024
6097e7b
Add PHP 8.4 to CI
yatsukhnenko Nov 25, 2024
b665925
Use smart str for constructing pipeline cmd
JakubOnderka Nov 23, 2024
99beb92
Initialize arrays with known size
JakubOnderka Nov 21, 2024
64da891
Do not allocate empty string or string with one character
JakubOnderka Nov 21, 2024
60b5a88
Use immutable empty array in Redis::exec
JakubOnderka Nov 22, 2024
3a2f3f4
Use immutable empty array in Redis::hKeys
JakubOnderka Nov 22, 2024
83a1965
Faster parameter parsing in redis_key_cmd and redis_key_long_val_cmd
JakubOnderka Nov 22, 2024
400503b
Optimise method array_zip_values_and_scores
JakubOnderka Nov 22, 2024
426de2b
Test for empty pipeline and multi
JakubOnderka Nov 24, 2024
5156e03
If no command is issued in multi mode, return immutable empty array
JakubOnderka Nov 24, 2024
2a2f908
Optimise constructing Redis command string
JakubOnderka Nov 25, 2024
f690647
Use zval_get_tmp_string method that is faster when provided zval is s…
JakubOnderka Nov 23, 2024
99650e1
Avoid unnecessary allocation in redis_key_varval_cmd
JakubOnderka Nov 24, 2024
4082dd0
Avoid unnecessary allocation in redis_hdel_cmd
JakubOnderka Nov 24, 2024
aba0993
Avoid unnecessary allocation in redis_hset_cmd
JakubOnderka Nov 24, 2024
2434ba2
Optimise HMGET method
JakubOnderka Nov 24, 2024
7895636
Remove unused redis_debug_response method from library.c
JakubOnderka Nov 27, 2024
571ffbc
Switch pipeline_cmd from smart_str to smart_string
JakubOnderka Dec 1, 2024
be38856
Reuse redis_sock_append_auth method
JakubOnderka Dec 1, 2024
a551fdc
Switch from linked list to growing array for reply callbacks
JakubOnderka Dec 5, 2024
42a4276
Use defines for callback growth + sanity check
michael-grunder Dec 9, 2024
f68544f
Refactor and avoid allocation in rawcommand method
JakubOnderka Dec 9, 2024
138d07b
Print cursor as unsigned 64 bit integer
bentleyo Dec 16, 2024
35c5988
Formatting improvements
bentleyo Dec 17, 2024
044b303
Reduce buffer size for signed integer, strlen(-9223372036854775808) =…
bentleyo Dec 17, 2024
43e6cab
Fix potential NULL dereference
peter15914 Jan 1, 2025
5cad207
Fix phpdoc type of '$pattern'
zeek0x Dec 23, 2024
9e504ed
Set priority to 60
yatsukhnenko Jan 2, 2025
3f8dba6
Regnerate stub hash
michael-grunder Jan 13, 2025
faa4bc2
Don't cast a uint64_t to a long.
michael-grunder Jan 13, 2025
a2eef77
Implement Valkey >= 8.1 IFEQ set option
michael-grunder Jan 19, 2025
c7b8784
Invalidate slot cache on failed cluster connections
jkenn99 Dec 19, 2024
a10bca3
Update codeql to v3
yatsukhnenko Jan 31, 2025
41e1141
Merge pull request #2618 from phpredis/codeql-v3
yatsukhnenko Feb 1, 2025
f9ce942
Introduce `Redis::OPT_PACK_IGNORE_NUMBERS` option.
michael-grunder Jan 26, 2025
29e5cf0
Minor refactor of ignroe numbers option
michael-grunder Jan 28, 2025
abb0f6c
Add details to the option doc block
michael-grunder Feb 5, 2025
9036ffc
Add getWithMeta method
yatsukhnenko Jan 30, 2025
1b72964
Update CHANGELOG.md
yatsukhnenko Feb 19, 2025
807f806
Reorganize tests
yatsukhnenko Feb 25, 2025
36ab585
Merge pull request #2627 from phpredis/feature/with-meta
yatsukhnenko Feb 26, 2025
d342e4a
Implement `GETDEL` for `RedisCluster`
michael-grunder Mar 6, 2025
e73130f
Fix error length calculation + UB sanity check.
michael-grunder Mar 10, 2025
f73f5fc
Fix arguments order for `SET` command
yatsukhnenko Mar 16, 2025
056c2db
Introduce `Redis::serverName` and `Redis::serverVersion` methods
yatsukhnenko Mar 16, 2025
cbaf095
Allow calling methods only in atomic mode
yatsukhnenko Mar 17, 2025
fa3eb00
Add tests for `serverName()` and `serverVersion()`
michael-grunder Mar 20, 2025
300c5fb
Make execHello protected
michael-grunder Mar 21, 2025
52e2b8a
Prepare for 6.2.0 release
michael-grunder Mar 17, 2025
3828c92
cleanup session temp file (#2641)
remicollet Mar 26, 2025
4f6a3ed
New option 'database' for Redis class constructor (#2597)
JakubOnderka Mar 27, 2025
0445e68
Refactor `getWithMeta` logic (#2643)
michael-grunder Mar 31, 2025
60ca48f
Redis Cluster does not have `SELECT`. (#2644)
michael-grunder Apr 1, 2025
0a85bd8
Simplify redis_unpack method calling
JakubOnderka Dec 4, 2024
5208818
We can use `zval_get_tmp_string` here
michael-grunder Apr 2, 2025
614b86e
New macros REDIS_RESPONSE_ERROR and REDIS_RETURN_ZVAL
JakubOnderka Nov 26, 2024
3c64b33
Fix SIGABRT in PHP 8.4 with RedisArray
Novynn Apr 8, 2025
bfbab89
Broaden return type for Redis::hGetAll
mgiuffrida Apr 20, 2025
b7a97e5
Update README.md
AkameOuO Apr 18, 2025
b48aa0d
Fix an unused variable warning
michael-grunder Apr 20, 2025
593ba01
Check for `dragonfly_version` in `HELLO` response
michael-grunder May 4, 2025
7350768
Implement several hash expiration commands
michael-grunder May 6, 2025
8014000
Attempt to fix flaky GitHub CI tests.
michael-grunder May 7, 2025
152fdda
Fix double -> int truncation warning
michael-grunder May 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix arguments order for SET command
Redis and Valkey doesn't consider command as invalid if order of arguments
is changed but other servers like DragonflyDB does.
In this commit `SET` command is fixed to more strictly follow the specs.
Also fixed usage of `zend_tmp_string` for `ifeq` argument.
  • Loading branch information
yatsukhnenko authored and michael-grunder committed Mar 16, 2025
commit f73f5fcce55ab9268c4eb40bf93cccdae418c1d2
31 changes: 13 additions & 18 deletions redis_commands.c
Original file line number Diff line number Diff line change
Expand Up @@ -2293,8 +2293,8 @@ int redis_set_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
char **cmd, int *cmd_len, short *slot, void **ctx)
{
char *key = NULL, *exp_type = NULL, *set_type = NULL;
zend_string *ifeq = NULL, *tmp = NULL;
zval *z_value, *z_opts = NULL;
zval *z_value, *z_opts = NULL, *ifeq = NULL;
zend_string *zstr = NULL, *tmp = NULL;
smart_string cmdstr = {0};
zend_long expire = -1;
zend_bool get = 0;
Expand Down Expand Up @@ -2329,14 +2329,13 @@ int redis_set_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
zend_string_equals_literal_ci(zkey, "PXAT"))
) {
if (redis_try_get_expiry(v, &expire) == FAILURE || expire < 1) {
zend_tmp_string_release(tmp);
setExpiryWarning(v);
return FAILURE;
}

exp_type = ZSTR_VAL(zkey);
} else if (zkey && !ifeq && zend_string_equals_literal_ci(zkey, "IFEQ")) {
ifeq = zval_get_tmp_string(v, &tmp);
} else if (zkey && zend_string_equals_literal_ci(zkey, "IFEQ")) {
ifeq = v;
} else if (Z_TYPE_P(v) == IS_STRING) {
if (zend_string_equals_literal_ci(Z_STR_P(v), "KEEPTTL")) {
keep_ttl = 1;
Expand All @@ -2351,7 +2350,6 @@ int redis_set_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
} ZEND_HASH_FOREACH_END();
} else if (z_opts && Z_TYPE_P(z_opts) != IS_NULL) {
if (redis_try_get_expiry(z_opts, &expire) == FAILURE || expire < 1) {
zend_tmp_string_release(tmp);
setExpiryWarning(z_opts);
return FAILURE;
}
Expand All @@ -2360,22 +2358,19 @@ int redis_set_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
/* Protect the user from syntax errors but give them some info about what's wrong */
if (exp_type && keep_ttl) {
php_error_docref(NULL, E_WARNING, "KEEPTTL can't be combined with EX or PX option");
zend_tmp_string_release(tmp);
return FAILURE;
}

/* You can't use IFEQ with NX or XX */
if (set_type && ifeq) {
php_error_docref(NULL, E_WARNING, "IFEQ can't be combined with NX or XX option");
zend_tmp_string_release(tmp);
return FAILURE;
}

/* Backward compatibility: If we are passed no options except an EXPIRE ttl, we
* actually execute a SETEX command */
if (expire > 0 && !exp_type && !set_type && !keep_ttl) {
*cmd_len = REDIS_CMD_SPPRINTF(cmd, "SETEX", "klv", key, key_len, expire, z_value);
zend_tmp_string_release(tmp);
return SUCCESS;
}

Expand All @@ -2388,26 +2383,26 @@ int redis_set_cmd(INTERNAL_FUNCTION_PARAMETERS, RedisSock *redis_sock,
redis_cmd_append_sstr_key(&cmdstr, key, key_len, redis_sock, slot);
redis_cmd_append_sstr_zval(&cmdstr, z_value, redis_sock);

if (exp_type) {
redis_cmd_append_sstr(&cmdstr, exp_type, strlen(exp_type));
redis_cmd_append_sstr_long(&cmdstr, (long)expire);
}

if (ifeq) {
zstr = zval_get_tmp_string(ifeq, &tmp);
REDIS_CMD_APPEND_SSTR_STATIC(&cmdstr, "IFEQ");
redis_cmd_append_sstr_zstr(&cmdstr, ifeq);
redis_cmd_append_sstr_zstr(&cmdstr, zstr);
zend_tmp_string_release(tmp);
} else if (set_type) {
redis_cmd_append_sstr(&cmdstr, set_type, strlen(set_type));
}

if (keep_ttl)
redis_cmd_append_sstr(&cmdstr, "KEEPTTL", 7);
if (get) {
REDIS_CMD_APPEND_SSTR_STATIC(&cmdstr, "GET");
*ctx = PHPREDIS_CTX_PTR;
}

zend_tmp_string_release(tmp);
if (exp_type) {
redis_cmd_append_sstr(&cmdstr, exp_type, strlen(exp_type));
redis_cmd_append_sstr_long(&cmdstr, (long)expire);
} else if (keep_ttl) {
REDIS_CMD_APPEND_SSTR_STATIC(&cmdstr, "KEEPTTL");
}

/* Push command and length to the caller */
*cmd = cmdstr.c;
Expand Down