617 Commits (08f0d5d7cfdf59ecc1e67fdf2dd8a3ad39c35376)
 

Author SHA1 Message Date
Nicolas Favre-Felix 08f0d5d7cf
Change contributed fix from gnu99 to c99 2 years ago
quocbao 50d16b16ca
Compile in C99 mode
src/websocket.c:247:2: error: 'for' loop initial declarations are only allowed in C99 mode
  for(int i = 0; p < eom && i < cmd->count; i++) {
  ^
2 years ago
Nicolas Favre-Felix c6b9d52213
Add new docs article about loading an RDB file into a Webdis container 2 years ago
Nicolas Favre-Felix ef8fcc5bab
Update docker images in README after release 0.1.20 was published 3 years ago
Nicolas Favre-Felix 41f200477b
Version bump after release 3 years ago
Nicolas Favre-Felix a984fdb8a5
Version 0.1.20
- Smaller Docker image size
- Bugfix: avoid responding to the wrong client (this could happen in rare cases)
- Better handling of WebSocket frames (details in #212)
- Fix regression introduced in 0.1.19, causing an empty header to be sent (#217)
3 years ago
Nicolas Favre-Felix 1b6e3a95ed
Merge pull request #218 from jessie-murray/empty-header 3 years ago
Jessie Murray 055363df46
Add test with curl for empty header (#217) 3 years ago
Jessie Murray 15302e754e
Preserve header count when a value is replaced
Fix for #217, a regression added in #205. The "header_count"
field was incremented even when we overwrote a header entry, which
caused Webdis to send a header with no name and no value.
3 years ago
Nicolas Favre-Felix 73f29055c1
Improvements to ws_peek_data (by @majklik)
Better handling of WS client frames, contributed in the comments of #212:
* Reject unmasked frames as per RFC 6455
* Avoid unnecessary data copy from/to evbuffer
* Remove conditions on has_mask

2 new tests cover this change:
* minimal ping-pong with masked client frame, unmasked response
* rejected unmasked client frame
3 years ago
Nicolas Favre-Felix d28dd3ec80
Avoid responding to the wrong fd after client disconnection
Slightly adapted from a proposed change by @majklik on GitHub in
issue #212 (one invalid read fixed and a memory leak avoided).
This marks an inflight cmd's fd as -1 when the HTTP client disconnects,
which prevents the later response from Redis from being sent to a new
client which has connected in the meantime and been assigned the same
client fd.
3 years ago
Nicolas Favre-Felix 545c56c4cb
Reduce Docker image size
* Remove apk cache after installing packages
* Remove unused Redis binaries: -benchmark and -cli

Those have to be done on the same line as `apk add` in order to be part
of the same image layer, since running them in a separate layer would
not affect the layer they were added to.
3 years ago
Nicolas Favre-Felix 2758fc0337
Fix heading typo in README 3 years ago
Nicolas Favre-Felix b8a43f03dc
Move docs from GitHub Discussions to the repo 3 years ago
Nicolas Favre-Felix 908c383838
Update docker images in README, link to new docs 3 years ago
Nicolas Favre-Felix 92ae1df7cd
Version bump after release 3 years ago
Nicolas Favre-Felix 417e0ac483
Release 0.1.19
- Performance: avoid redundant operations when building HTTP responses.
- Fix HTTP parser bug on architectures that used unsigned "char" types.
- Fix crash when receiving "FIN" WebSocket frame (#209).
3 years ago
Jessie Murray 7d495e30c2
Add test for issue #209, Webdis crashing after receiving FIN frame
Connect, handshake, send FIN frame, disconnect. Webdis shouldn't crash.
3 years ago
Jessie Murray 6539ae13f9
Call ws_close_if_able instead of ws_client_free in worker.c
Update last call to ws_client_free to use ws_close_if_able instead, from
worker.c
3 years ago
Jessie Murray 887e0ec73f
Only call ws_client_free once all scheduled events have triggered
Fixes #209. A WS client socket closure could cause Webdis to schedule
the send of a closing frame, leading to both EV_READ and EV_WRITE
scheduled events. They would both fail and each lead to a call to
ws_client_free, causing a double free that ends in a crash.
3 years ago
Jessie Murray 55128ae263
Fix http_parser check for architectures with unsigned chars
http_parser.c has a table named "unhex" that it uses to convert hex
characters to their numeric values, e.g. 'F' -> 15. For non-hex
characters, the value is -1 but while the table contains int8_t values,
the extraction is done using a char. On ARMv8, char is *unsigned*, which
means it can't be compared to -1 as this is always false. Comparing to
(char)-1 instead will work.
3 years ago
Nicolas Favre-Felix 74d4092ac6
Merge pull request #205 from jessie-murray/http-improvements 3 years ago
Jessie Murray 7ce6d497c1
Add HEADER_CHECK_DUPE to bypass duplicate check
Almost all header entries are guaranteed to be added only once, so we
don't need to check for duplicates all the time. In the current code
base only Content-Length has the potential for being added twice, and
even then it seems highly unlikely. For all others, we can now bypass
this check.
This commit also changes the header_copy flags to be 1-bit flags, so
that they can be combined.
3 years ago
Jessie Murray dc9d1b646e
Avoid re-allocating headers array in http_response
Allocate the headers array once with the default number of entries
sufficient for most requests, and only re-allocate if needed instead of
re-allocating with each header.
3 years ago
Jessie Murray c7c6fc010f
Avoid copying header strings for http_response
http_response has an array of http_header key/value pairs, and most of
the time these use constant strings that do not need to be copied and
re-allocated. This change adds a flag tracking which values need to be
copied, were copied and need to be freed.
3 years ago
Nicolas Favre-Felix 93e96565a6
Update Dockerfile for Webdis 0.1.18.1 3 years ago
Nicolas Favre-Felix bb98f6113c
Add link to tutorial on Redis & Webdis in Docker Compose with SSL 3 years ago
Nicolas Favre-Felix b5841037c8
Update docker images referenced in the README to the latest version (0.1.18) 3 years ago
Nicolas Favre-Felix 173ce15308
Version bump after release 3 years ago
Nicolas Favre-Felix a12c39a6f3
Release 0.1.18
New feature: support for SSL connections to Redis.

Webdis can now connect securely to Redis, thanks to the Hiredis
client library. Docker images for Webdis will now contain two binaries,
"webdis" and "webdis-ssl", the latter depending on OpenSSL.

See Webdis README for details: https://github.com/nicolasff/webdis#configuring-webdis-with-ssl
3 years ago
Nicolas Favre-Felix 277e6fc303
Update Dockerfile to build webdis with SSL support
Two binaries are built and packaged:
* /usr/local/bin/webdis -- still without SSL and does not depend on
  OpenSSL
* /usr/local/bin/webdis-ssl -- supports SSL, depends on OpenSSL but has
  to be used with the webdis image as a base image or in a container
  injecting the webdis config and certs.
3 years ago
Nicolas Favre-Felix 119ebc85b6
Merge branch 'redis-ssl' into 'master' (fixes #201) 3 years ago
Jessie Murray 863d003531
Review comments 3 years ago
Jessie Murray 8e9dcda928
Document SSL configuration and troubleshooting 3 years ago
Jessie Murray 1e9f6048e8
Add config parsing 3 years ago
Jessie Murray 83fe141f7e
Encrypt connections to Redis
Initialize SSL, use SSL context with each connection, enable flags in
Makefile.
TODO: read config into s->cfg, still missing for now
3 years ago
Jessie Murray 524e0245c1
Fix warnings introduced by type change due to Hiredis upgrade 3 years ago
Jessie Murray fc671090cd
Mark unused functions in Hiredis dict.c
Add back __UNUSED_FUNCTION__ dropped in Hiredis upgrade.
3 years ago
Jessie Murray c943844451
Upgrade Hiredis to v1.0.2 3 years ago
Nicolas Favre-Felix 73fb3b68ff
Update docker images in README, add ECR trust details
1. Update docker images referenced in the README to latest version
 2. Add paragraph + tutorial about content trust and ECR
3 years ago
Nicolas Favre-Felix 10e1c40a5f
Version bump after release 3 years ago
Nicolas Favre-Felix 942be1fd54
Release 0.1.17.1 (Fixes Redis vulnerabilities)
Security update: upgrading the version of Redis bundled in
the Webdis image to fix a number of severe vulnerabilities.

* Low severity vulnerability found in redis/redis
  Description: Integer Overflow or Wraparound
  Info: https://snyk.io/vuln/SNYK-ALPINE314-REDIS-1727801
  Introduced through: redis/redis@6.2.5-r0
  From: redis/redis@6.2.5-r0
  Fixed in: 6.2.6-r0

* Medium severity vulnerability found in redis/redis
  Description: Out-of-bounds Read
  Info: https://snyk.io/vuln/SNYK-ALPINE314-REDIS-1727803
  Introduced through: redis/redis@6.2.5-r0
  From: redis/redis@6.2.5-r0
  Fixed in: 6.2.6-r0

* High severity vulnerability found in redis/redis
  Description: Allocation of Resources Without Limits or Throttling
  Info: https://snyk.io/vuln/SNYK-ALPINE314-REDIS-1727783
  Introduced through: redis/redis@6.2.5-r0
  From: redis/redis@6.2.5-r0
  Fixed in: 6.2.6-r0

* High severity vulnerability found in redis/redis
  Description: CVE-2021-32626
  Info: https://snyk.io/vuln/SNYK-ALPINE314-REDIS-1727820
  Introduced through: redis/redis@6.2.5-r0
  From: redis/redis@6.2.5-r0
  Fixed in: 6.2.6-r0

* High severity vulnerability found in redis/redis
  Description: Integer Overflow or Wraparound
  Info: https://snyk.io/vuln/SNYK-ALPINE314-REDIS-1727822
  Introduced through: redis/redis@6.2.5-r0
  From: redis/redis@6.2.5-r0
  Fixed in: 6.2.6-r0

* High severity vulnerability found in redis/redis
  Description: Integer Overflow or Wraparound
  Info: https://snyk.io/vuln/SNYK-ALPINE314-REDIS-1727823
  Introduced through: redis/redis@6.2.5-r0
  From: redis/redis@6.2.5-r0
  Fixed in: 6.2.6-r0

* High severity vulnerability found in redis/redis
  Description: Integer Overflow or Wraparound
  Info: https://snyk.io/vuln/SNYK-ALPINE314-REDIS-1727825
  Introduced through: redis/redis@6.2.5-r0
  From: redis/redis@6.2.5-r0
  Fixed in: 6.2.6-r0

* High severity vulnerability found in redis/redis
  Description: Integer Overflow or Wraparound
  Info: https://snyk.io/vuln/SNYK-ALPINE314-REDIS-1727826
  Introduced through: redis/redis@6.2.5-r0
  From: redis/redis@6.2.5-r0
  Fixed in: 6.2.6-r0
3 years ago
Nicolas Favre-Felix 9bbe0d3389
Update docker images referenced in the README to the latest version (0.1.17) 3 years ago
Nicolas Favre-Felix ad0e14c3df
Version bump after release 3 years ago
Nicolas Favre-Felix 8430eadc29
Release 0.1.17
* Many improvements to WebSocket implementation (#198, #199). WebSocket
  support is now much more stable, and better tested. The feature is
  still disabled by default, but is recommended for testing.
* Base image updated from Alpine 3.12.7 to 3.14.2 to resolve
  vulnerabilities found in Alpine. Webdis itself is not at risk, but
  images *based* on Webdis could be using vulnerable software if they
  use packages from Alpine 3.12.7.
3 years ago
Nicolas Favre-Felix 871992d4aa
Update base image from alpine 3.12.7 to 3.14.2 3 years ago
Jessie Murray 3aaeabfcd3
CodeQL: Poorly documented large function
Document conf_read a bit more, and add some error reporting + 2 missing
free() calls. The leak was insignificant, only happening once at
startup.
3 years ago
Jessie Murray d2b115616f
CodeQL: Potentially uninitialized local variable
This is not really uninitialized, it would only happen if the string
dumped with dump_string was empty of contained invalid UTF-8. Setting
an initial value has no effect since codepoint is used as an "out"
value in utf8_iterate.
3 years ago
Nicolas Favre-Felix b1b300f508
README: document WebSocket demo, add links, minor cleanup 3 years ago
Nicolas Favre-Felix 35a2598760
Report invalid config keys or value types 3 years ago