Age | Commit message (Collapse) | Author |
|
Add timeout to libuv adapter
Co-authored-by: sunmingqi <sunmingqi@corp.netease.com>
Co-authored-by: sunmingqi <smq222@126.com>
Co-authored-by: Michael Grunder <michael.grunder@gmail.com>
Co-authored-by: Viktor Söderqvist <viktor@zuiderkwast.se>
|
|
* Add test of async commands after unsubscribe
Verify that commands are handled after unsubscribing from a channel.
A command is sent before the `unsubscribe` response is received,
which currently triggers an assert in async.c:567:
`redisProcessCallbacks: Assertion `(c->flags & REDIS_SUBSCRIBED || c->flags & REDIS_MONITORING)' failed.`
* Handle async commands after an unsubscribe
When unsubscribing from the last channel we move from the `subscribe`
state to a normal state. These states uses different holders for the
command callback information.
By moving the callback info during the state change the callback order
can be maintained.
|
|
* Add test of command timeout during pubsub
A timeout of a non-subscribe command will be ignored during pubsub.
It will be handled as an idle timeout and a response is awaited for.
* Correction for command timeout during pubsub
Disconnect when a sent non-subscribe command triggers a timeout.
|
|
Define hiredis as a C project (and use a single PROJECT statement) to
avoid the following build failure if a C++ compiler is not found:
CMake Error at CMakeLists.txt:3 (PROJECT):
The CMAKE_CXX_COMPILER:
/srv/storage/autobuild/run/instance-1/output-1/host/bin/arm-linux-g++
is not a full path to an existing compiler tool.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
The only cpp source file is examples/example-qt.cpp which is never
compiled with cmake buildsystem. This file is compiled only with the
Makefile buildsystem so perhaps it should be removed. If it is added to
the cmake buildsystem, a call to enable_language(CXX) will have to be
added.
Fixes:
- http://autobuild.buildroot.org/results/830ec3398cd29b9fc5cde06a225ef531d7a9d850
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
|
Where SOCKET is a 64-bit unsigned integer.
|
|
|
|
Move SSL options into two blocks to make it easy to read:
1, first part: SSL variables part
1, second part: SSL building rules part
and change global rules to make it easy to maintain. For the further
step, it gets extensible to add another type.
New version of the library building rule:
static: $(STLIBNAME) $(SSL_STLIB)
dynamic: $(DYLIBNAME) $(SSL_DYLIB)
Compare with the orignal version:
dynamic: $(DYLIBNAME)
static: $(STLIBNAME)
ifeq ($(USE_SSL),1)
dynamic: $(SSL_DYLIBNAME)
static: $(SSL_STLIBNAME)
endif
If we want to add a new type(Ex, RDMA), for the new version, we can
do like this:
########### RDMA variables start ###############
.....
########### RDMA variables end ###############
static: $(STLIBNAME) $(SSL_STLIB) $(RDMA_STLIB)
dynamic: $(DYLIBNAME) $(SSL_DYLIB) $(RDMA_DYLIB)
########### RDMA building rules start ###############
.....
########### RDMA building rules end ###############
Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
|
|
add alias hiredis::hiredis and hiredis::hiredis_static so when this project is FetchContent, it behave the same as find_package-ed.
e.g.
```
find_package(hiredis 1.0.2 QUIET)
if (NOT hiredis_FOUND)
FetchContent_Declare(
hiredis
GIT_REPOSITORY https://github.com/redis/hiredis.git
GIT_TAG v1.0.2
)
FetchContent_MakeAvailable(hiredis)
endif ()
# later
target_link_libraries(target **hiredis::hiredis**) #can always use hiredis::hiredis to ref to this project. no matter find_package or FetchContent
```
this is actually sort of best practice when making a CMake lib.
|
|
|
|
RESP3 allows sending commands in parallell with pubsub handling
and these commands might get responded with a REDIS_REPLY_ARRAY.
This conflicts with the pubsub response handling for RESP2 and
results in a faulty state when using RESP3.
Add functionality to keep track of PUSH/RESP3 support on the connection
and only expect the message type REDIS_REPLY_PUSH as subscribe messages
when once seen.
|
|
* Handle PING during pubsub in RESP2
* Rename invalid callback list
Some commands are valid to send during a subscribe in RESP2, and
most in RESP3. Renaming the callback list from `invalid` to `replies`
to detail this fact.
* Fix review comment
|
|
* BSD linkage fix proposal
* Touch up the Makefile to fix BSD builds
Fixes #984
* Add a build in FreeBSD to GitHub Actions
Lots of people use hiredis in FreeBSD so this should reduce some pain
moving forward.
Co-authored-by: David Carlier <devnexen@gmail.com>
|
|
* Include `unsubscribe` as a subscribe reply in RESP3
By providing the (p)unsubscribe message via the subscribe callback,
instead of via the push callback, we get the same behavior in RESP3
as in RESP2.
* Add asynchronous test for pubsub using RESP3
The testcase will subscribe to a channel, and via a second client
a message is published to the channel. After receiving the message
the testcase will unsubscribe and disconnect.
This RESP3 testcase reuses the subscribe callback from the RESP2
testcase to make sure we have a common behavior.
|
|
By default Valgrind will return the exit code from the tested process.
Since our test can return 0 (ALL TESTS PASS) even when a leak was
found we need to tell Valgrind to return an error code.
This will fail the CI job when issues are found.
|
|
CMake started hanging when trying to detect the C compiler ABI in cygin,
so for now just build with make directly.
|
|
|
|
A warning in `redisLibevTimeout(..)` is triggered when building the
libev adapter with Clang using -Wextra/-Wunused-parameter.
Works fine with gcc..
|
|
|
|
The testcase will subscribe to a channel, and via a second client
a message is published to the channel. After receiving the message
the testcase will unsubscribe and disconnect.
|
|
Asynchronous testcases that requires the event library `libevent`
can be built and enabled by using the added build flags:
- ENABLE_ASYNC_TESTS when using CMake
- TEST_ASYNC when using Make
The async tests are disabled by default to avoid adding new requirements,
but the testcases are built and run in CI.
|
|
* Exclude includes from /usr in coverage reporting
* Correct build target `coverage` for enabled ssl
`USE_SSL=1 make coverage` will now build the test binary with the
forwarded define HIREDIS_TEST_SSL. This avoids inconsistency between
built test binary and the testrunner `test.sh`.
This enables test coverage measurements for SSL too.
|
|
|
|
|
|
I'm sure this can be done with a container matrix but figuring that out
is left for another day.
|
|
|
|
|
|
See: #992
TODO: MinGW/cygwin tests
|
|
Since TravisCI.org was deprecated we've been without any tests. This
commit adds back basic tests in Ubuntu, CentOS, and MacOS.
More sophisticated tests/platforms to come in the future (e.g. 32bit
tests).
See: #992
|
|
|
|
Since `hi_calloc` always passes through one of our wrapper functions,
we can perform this overflow in the wrapper, and get protection
everywhere.
Previous commit: 76a7b10005c70babee357a7d0f2becf28ec7ed1e
Related vuln ID: CVE-2021-32765
[Full Details](https://github.com/redis/hiredis/security/advisories/GHSA-hfm9-39pp-55p2)
|
|
Or it'll be treated as part of the var name.
|
|
|
|
|
|
|
|
Merge the v1.0.1 release branch and bump the dev version to 1.0.2-dev
|
|
|
|
This fix prevents hiredis from trying to allocate more than `SIZE_MAX`
bytes, which would result in a buffer overrun.
[Full Details](https://github.com/redis/hiredis/security/advisories/GHSA-hfm9-39pp-55p2)
|
|
|
|
Co-authored-by: James Rouzier <jrouzier@inverse.ca>
|
|
When set hiredis will not automatically free replies in an async context, and the replies must be freed instead by the user.
Co-authored-by: Michael Grunder <michael.grunder@gmail.com>
|
|
|
|
Closes #929
|
|
Bugfix: Ignore timeout callback from a successful connect (fixes #945)
|
|
improve SSL leak fix redis/hiredis#896
|
|
fix(docs): corrects typos in project README
|
|
|
|
Free SSL object when redisSSLConnect fails but avoid doing that for
callers of redisInitiateSSL who are supposed to manager their own SSL
object.
Signed-off-by: Hans Zandbelt <hans.zandbelt@zmartzone.eu>
|
|
|
|
Since redisGetReplyFromReader is exposed in a header file, we probably
shouldn't modify how it behaves in any way. For this reason, handle the
changed logic in an internal static helper method.
|
|
RESP3 invalidation messages always seemed to be sent before the response
to a given command, but it appears this is not always the case:
In Redis 6.2.0RC1 Redis sends the invalidation after the HSET in the
following sequence:
```
hget hash field
$5
value
hset hash field value
:0
>2
$10
invalidate
*1
$4
hash
```
To account for this possibility just wrap redisGetReplyFromReader in a
loop as it is called twice in redisGetReply.
|