1. 11 Jan, 2022 1 commit
    • Bjorn Svensson's avatar
      Correction for command timeout during pubsub (#1038) · ff860e55
      Bjorn Svensson authored
      * 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.
      ff860e55
  2. 22 Dec, 2021 1 commit
    • Bjorn Svensson's avatar
      Handle array response in parallell with pubsub using RESP3 (#1014) · 58aacdac
      Bjorn Svensson authored
      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.
      58aacdac
  3. 16 Dec, 2021 1 commit
    • Bjorn Svensson's avatar
      Support PING while subscribing (RESP2) (#1027) · d3384260
      Bjorn Svensson authored
      * 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
      d3384260
  4. 01 Dec, 2021 1 commit
    • Bjorn Svensson's avatar
      Add asynchronous test for pubsub using RESP3 (#1012) · da5a4ff3
      Bjorn Svensson authored
      * 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.
      da5a4ff3
  5. 17 Nov, 2021 1 commit
  6. 27 Oct, 2021 1 commit
  7. 10 Oct, 2021 2 commits
  8. 04 Oct, 2021 1 commit
  9. 26 Feb, 2021 8 commits
  10. 18 Oct, 2020 1 commit
    • michael-grunder's avatar
      Fix handling of NIL invalidation messages. · b9b9f446
      michael-grunder authored
      When CLIENT TRACKING is enabled, Redis will send an invalidation message
      with a NIL payload to all tracking clients after a FLUSHDB is executed.
      
      We didn't account for REDIS_REPLY_PUSH being a valid parent object to a
      NIL payload, and were failing an assertion.
      
      Additionally this commit adds a regression test for the logic.
      b9b9f446
  11. 29 Jul, 2020 1 commit
    • Michael Grunder's avatar
      Move SSL management to a distinct private pointer. (#855) · d8ff7238
      Michael Grunder authored
      We need to allow our users to use redisContext->privdata as context
      for any RESP3 PUSH messages, which means we can't use it for managing
      SSL connections.
      
      Bulletpoints:
      
      * Create a secondary redisContext member for internal use only called
        privctx and rename the redisContextFuncs->free_privdata accordingly.
      
      * Adds a `free_privdata` function pointer so the user can tie allocated
        memory to the lifetime of a redisContext (like they can already do
        with redisAsyncContext)
      
      * Enables SSL tests in .travis.yml
      d8ff7238
  12. 20 Jul, 2020 1 commit
    • Michael Grunder's avatar
      Resp3 oob push support (#841) · 2e7d7cba
      Michael Grunder authored
      Proper support for RESP3 PUSH messages.
      
      By default, PUSH messages are now intercepted and the reply memory freed.  
      This means existing code should work unchanged when connecting to Redis
      >= 6.0.0 even if `CLIENT TRACKING` were then enabled.
      
      Additionally, we define two callbacks users can configure if they wish to handle
      these messages in a custom way:
      
      void redisPushFn(void *privdata, void *reply);
      void redisAsyncPushFn(redisAsyncContext *ac, void *reply);
      
      See #825
      2e7d7cba
  13. 26 May, 2020 1 commit
  14. 25 May, 2020 1 commit
  15. 24 May, 2020 1 commit
  16. 22 May, 2020 1 commit
    • Michael Grunder's avatar
      Allow users to replace allocator and handle OOM everywhere. (#800) · 8e0264cf
      Michael Grunder authored
      * Adds an indirection to every allocation/deallocation to allow users to 
        plug in ones of their choosing (use custom functions, jemalloc, etc).
      
      * Gracefully handle OOM everywhere in hiredis.  This should make it possible
        for users of the library to have more flexibility in how they handle such situations.
      
      * Changes `redisReaderTask->elements` from an `int` to a `long long` to prevent
        a possible overflow when transferring the task elements into a `redisReply`.
      
      * Adds a configurable `max elements` member to `redisReader` that defaults to
        2^32 - 1.  This can be set to "unlimited" by setting the value to zero.
      8e0264cf
  17. 21 May, 2020 1 commit
  18. 19 May, 2020 1 commit
  19. 04 May, 2020 1 commit
    • Michael Grunder's avatar
      Remove nested depth limitation. (#797) · eafb085d
      Michael Grunder authored
      * Remove nested depth limitation.
      
      This commit removes the nested multi-bulk depth limitation of 7.
      We do this by switching to pointer to pointer indirection and
      growing the stack in chunks when needed.
      
      See: #794, #421
      eafb085d
  20. 03 Apr, 2020 1 commit
    • Michael Grunder's avatar
      Win32 tests and timeout fix (#776) · cc9d0329
      Michael Grunder authored
      Unit tests in Windows and a Windows timeout fix
      
      This commit gets our unit tests compiling and running on Windows as well as removes a duplicated `timeval` -> `DWORD` conversion logic in sockcompat.c 
      
      There are minor differences in behavior between Linux and Windows to note:
      
      1.  In Windows, opening a non-existent hangs forever in WSAPoll whereas
          it correctly returns with a "Connection refused" error on Linux.
          For that reason, I simply skip this test in Windows.
      
          It may be related to this known issue:
          https://daniel.haxx.se/blog/2012/10/10/wsapoll-is-broken/
      
      2.  Timeouts are handled slightly differently in Windows and Linux.  
          In Linux, we intentionally set REDIS_ERR_IO for connection
          timeouts whereas in Windows we set REDIS_ERR_TIMEOUT.  It may be
          prudent to fix this discrepancy although there are almost certainly
          users relying on the current behavior.
      cc9d0329
  21. 12 Dec, 2019 1 commit
    • michael-grunder's avatar
      Free the reply in redisGetReply when passed NULL · ac0b186a
      michael-grunder authored
      We currently perform a NULL check in redisGetReply and don't push the
      reply back to the caller, but we don't free any reply meaning that this
      will leak memory:
      
      redisGetReply(context, NULL);
      
      This change simply frees the reply if we were passed NULL.
      
      Addresses #740
      ac0b186a
  22. 25 Sep, 2019 1 commit
  23. 16 Sep, 2019 1 commit
    • Yossi Gottlieb's avatar
      Add SSL mode tests. · d952ed87
      Yossi Gottlieb authored
      This repeats all existing tests in SSL mode, but does not yet provide
      SSL-specific tests.
      d952ed87
  24. 14 May, 2019 1 commit
  25. 31 Mar, 2019 1 commit
  26. 26 Nov, 2018 1 commit
  27. 26 Sep, 2018 1 commit
  28. 21 May, 2018 1 commit
  29. 20 May, 2018 3 commits
  30. 19 May, 2018 1 commit