Package: release.debian.org User: release.debian....@packages.debian.org Usertags: unblock
Dear release team, Please consider unblocking redis 3:3.2.8-2 for stretch: * It includes updates designated "upgrade urgency HIGH" by upstream. * It fixes a (minor) cross-scripting attacking. * It fixes some internal Debian packaging/systemd brokenness. The relevant debian/changelog entries are: redis (3:3.2.8-2) unstable; urgency=medium * Avoid conflict between RuntimeDirectory and tmpfiles.d(5) both attempting to create /run/redis with differing permissions. This prevents an installation error on Jessie where /run/redis was first being created by the tmpfiles.d(5) mechanism and then subsequently via the RuntimeDirectory directive. Due to a bug in Jessie's systemd, this caused a package installation error as systemd was too strict about permissions if the target already exists: <https://github.com/systemd/systemd/pull/896> The redis-{server,sentinel} daemon would actually start successfully a few milliseconds later due to the Restart=always directive. We work around this this by dropping the tmpfiles.d(5) handling and moving entirely to RuntimeDirectory{,Mode}; we are not using any special handling requiring tmpfiles.d(5) and we appear to need RuntimeDirectory anyway for #846350. (Closes: #856116) -- Chris Lamb <la...@debian.org> Sat, 11 Mar 2017 12:53:14 +0000 redis (3:3.2.8-1) unstable; urgency=medium * New upstream release. -- Chris Lamb <la...@debian.org> Mon, 13 Feb 2017 10:15:53 +1300 redis (3:3.2.7-1) unstable; urgency=medium * New upstream release. -- Chris Lamb <la...@debian.org> Wed, 01 Feb 2017 09:27:05 +1300 redis (3:3.2.6-6) unstable; urgency=medium * Use --cpu-list 0 (not --cpu-list 1) to ensure compilation on single-CPU machines. (Closes: #852347) -- Chris Lamb <la...@debian.org> Tue, 24 Jan 2017 11:59:02 +1300 redis (3:3.2.6-5) unstable; urgency=medium * Re-add taskset calls to try and avoid FTBFS due to parallelism in upstream test suite. -- Chris Lamb <la...@debian.org> Mon, 23 Jan 2017 13:24:39 +1300 redis (3:3.2.6-4) unstable; urgency=medium * Expand the documentation in redis-server.service and redis-sentinel regarding the default hardening options. -- Chris Lamb <la...@debian.org> Sat, 21 Jan 2017 11:21:33 +1100 redis (3:3.2.6-3) unstable; urgency=medium * Don't ship a "duplicate" redis-server binary in redis-tools as /usr/bin/redis-check-rdb (it checks argv to change its behaviour) by replacing it with a symlink. Found by <https://dedup.debian.net/>. -- Chris Lamb <la...@debian.org> Wed, 11 Jan 2017 17:04:33 +0000 redis (3:3.2.6-2) unstable; urgency=medium * Rename RunTimeDirectory -> RuntimeDirectory in .service files. (Closes: #850534) * Refresh all patches with pq import -> pq export. * Tidy all patches, updating descriptions and use Pq-Topic to organise. -- Chris Lamb <la...@debian.org> Sat, 07 Jan 2017 18:06:14 +0000 The full diffoscope diff is attached; note there very little actual change to the code. Regards, -- ,''`. : :' : Chris Lamb `. `'` la...@debian.org / chris-lamb.co.uk `-
--- /tmp/what-changed.redis.k9cqt5gv.a +++ /tmp/what-changed.redis.77r9sp72.b âââ file list â @@ -7,38 +7,39 @@ â redis/.pc/0001-fix-ftbfs-on-kfreebsd.patch â redis/.pc/0001-fix-ftbfs-on-kfreebsd.patch/deps â redis/.pc/0001-fix-ftbfs-on-kfreebsd.patch/deps/hiredis â redis/.pc/0001-fix-ftbfs-on-kfreebsd.patch/deps/hiredis/net.c â redis/.pc/0002-fix-ftbfs-on-kfreebsd.patch â redis/.pc/0002-fix-ftbfs-on-kfreebsd.patch/src â redis/.pc/0002-fix-ftbfs-on-kfreebsd.patch/src/fmacros.h â -redis/.pc/0003-use-system-jemalloc.patch â -redis/.pc/0003-use-system-jemalloc.patch/src â -redis/.pc/0003-use-system-jemalloc.patch/src/Makefile â -redis/.pc/0003-use-system-jemalloc.patch/src/debug.c â -redis/.pc/0003-use-system-jemalloc.patch/src/zmalloc.c â -redis/.pc/0003-use-system-jemalloc.patch/src/zmalloc.h â -redis/.pc/0004-dpkg-buildflags.patch â -redis/.pc/0004-dpkg-buildflags.patch/deps â -redis/.pc/0004-dpkg-buildflags.patch/deps/hiredis â -redis/.pc/0004-dpkg-buildflags.patch/deps/hiredis/Makefile â -redis/.pc/0004-dpkg-buildflags.patch/deps/linenoise â -redis/.pc/0004-dpkg-buildflags.patch/deps/linenoise/Makefile â -redis/.pc/0004-dpkg-buildflags.patch/src â -redis/.pc/0004-dpkg-buildflags.patch/src/Makefile â redis/.pc/0005-SOURCE_DATE_EPOCH.patch â redis/.pc/0005-SOURCE_DATE_EPOCH.patch/src â redis/.pc/0005-SOURCE_DATE_EPOCH.patch/src/mkreleasehdr.sh â -redis/.pc/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â -redis/.pc/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests â -redis/.pc/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests/test_helper.tcl â -redis/.pc/0008-Drop-tests-with-timing-issues.patch â -redis/.pc/0008-Drop-tests-with-timing-issues.patch/tests â -redis/.pc/0008-Drop-tests-with-timing-issues.patch/tests/test_helper.tcl â redis/.pc/applied-patches â +redis/.pc/debian-packaging â +redis/.pc/debian-packaging/0003-use-system-jemalloc.patch â +redis/.pc/debian-packaging/0003-use-system-jemalloc.patch/src â +redis/.pc/debian-packaging/0003-use-system-jemalloc.patch/src/Makefile â +redis/.pc/debian-packaging/0003-use-system-jemalloc.patch/src/debug.c â +redis/.pc/debian-packaging/0003-use-system-jemalloc.patch/src/zmalloc.c â +redis/.pc/debian-packaging/0003-use-system-jemalloc.patch/src/zmalloc.h â +redis/.pc/debian-packaging/0004-dpkg-buildflags.patch â +redis/.pc/debian-packaging/0004-dpkg-buildflags.patch/deps â +redis/.pc/debian-packaging/0004-dpkg-buildflags.patch/deps/hiredis â +redis/.pc/debian-packaging/0004-dpkg-buildflags.patch/deps/hiredis/Makefile â +redis/.pc/debian-packaging/0004-dpkg-buildflags.patch/deps/linenoise â +redis/.pc/debian-packaging/0004-dpkg-buildflags.patch/deps/linenoise/Makefile â +redis/.pc/debian-packaging/0004-dpkg-buildflags.patch/src â +redis/.pc/debian-packaging/0004-dpkg-buildflags.patch/src/Makefile â +redis/.pc/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â +redis/.pc/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests â +redis/.pc/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests/test_helper.tcl â +redis/.pc/debian-packaging/0008-Drop-tests-with-timing-issues.patch â +redis/.pc/debian-packaging/0008-Drop-tests-with-timing-issues.patch/tests â +redis/.pc/debian-packaging/0008-Drop-tests-with-timing-issues.patch/tests/test_helper.tcl â redis/00-RELEASENOTES â redis/BUGS â redis/CONTRIBUTING â redis/COPYING â redis/INSTALL â redis/MANIFESTO â redis/Makefile â @@ -53,44 +54,44 @@ â redis/debian/compat â redis/debian/control â redis/debian/copyright â redis/debian/gbp.conf â redis/debian/patches â redis/debian/patches/0001-fix-ftbfs-on-kfreebsd.patch â redis/debian/patches/0002-fix-ftbfs-on-kfreebsd.patch â -redis/debian/patches/0003-use-system-jemalloc.patch â -redis/debian/patches/0004-dpkg-buildflags.patch â redis/debian/patches/0005-SOURCE_DATE_EPOCH.patch â -redis/debian/patches/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â -redis/debian/patches/0008-Drop-tests-with-timing-issues.patch â +redis/debian/patches/debian-packaging â +redis/debian/patches/debian-packaging/0003-use-system-jemalloc.patch â +redis/debian/patches/debian-packaging/0004-dpkg-buildflags.patch â +redis/debian/patches/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â +redis/debian/patches/debian-packaging/0008-Drop-tests-with-timing-issues.patch â redis/debian/patches/series â redis/debian/redis-benchmark.1 â redis/debian/redis-cli.1 â redis/debian/redis-sentinel.default â redis/debian/redis-sentinel.init â redis/debian/redis-sentinel.install â redis/debian/redis-sentinel.links â redis/debian/redis-sentinel.logrotate â redis/debian/redis-sentinel.postinst â redis/debian/redis-sentinel.postrm â redis/debian/redis-sentinel.service â -redis/debian/redis-sentinel.tmpfile â redis/debian/redis-server.1 â redis/debian/redis-server.default â redis/debian/redis-server.docs â redis/debian/redis-server.init â redis/debian/redis-server.install â redis/debian/redis-server.logrotate â redis/debian/redis-server.manpages â redis/debian/redis-server.postinst â redis/debian/redis-server.postrm â redis/debian/redis-server.service â -redis/debian/redis-server.tmpfile â redis/debian/redis-tools.examples â redis/debian/redis-tools.install â +redis/debian/redis-tools.links â redis/debian/redis-tools.manpages â redis/debian/redis.conf â redis/debian/rules â redis/debian/sentinel.conf â redis/debian/source â redis/debian/source/format â redis/debian/source/options â @@ -696,10 +697,10 @@ â redis/utils/releasetools â redis/utils/releasetools/01_create_tarball.sh â redis/utils/releasetools/02_upload_tarball.sh â redis/utils/releasetools/03_test_release.sh â redis/utils/releasetools/04_release_hash.sh â redis/utils/speed-regression.tcl â redis/utils/whatisdoing.sh â -redis_3.2.6-1.debian.tar.xz â -redis_3.2.6-1.dsc â -redis_3.2.6.orig.tar.gz â +redis_3.2.8-2.debian.tar.xz â +redis_3.2.8-2.dsc â +redis_3.2.8.orig.tar.gz âââ redis âââ file list â â @@ -6,38 +6,39 @@ â â .pc/0001-fix-ftbfs-on-kfreebsd.patch â â .pc/0001-fix-ftbfs-on-kfreebsd.patch/deps â â .pc/0001-fix-ftbfs-on-kfreebsd.patch/deps/hiredis â â .pc/0001-fix-ftbfs-on-kfreebsd.patch/deps/hiredis/net.c â â .pc/0002-fix-ftbfs-on-kfreebsd.patch â â .pc/0002-fix-ftbfs-on-kfreebsd.patch/src â â .pc/0002-fix-ftbfs-on-kfreebsd.patch/src/fmacros.h â â -.pc/0003-use-system-jemalloc.patch â â -.pc/0003-use-system-jemalloc.patch/src â â -.pc/0003-use-system-jemalloc.patch/src/Makefile â â -.pc/0003-use-system-jemalloc.patch/src/debug.c â â -.pc/0003-use-system-jemalloc.patch/src/zmalloc.c â â -.pc/0003-use-system-jemalloc.patch/src/zmalloc.h â â -.pc/0004-dpkg-buildflags.patch â â -.pc/0004-dpkg-buildflags.patch/deps â â -.pc/0004-dpkg-buildflags.patch/deps/hiredis â â -.pc/0004-dpkg-buildflags.patch/deps/hiredis/Makefile â â -.pc/0004-dpkg-buildflags.patch/deps/linenoise â â -.pc/0004-dpkg-buildflags.patch/deps/linenoise/Makefile â â -.pc/0004-dpkg-buildflags.patch/src â â -.pc/0004-dpkg-buildflags.patch/src/Makefile â â .pc/0005-SOURCE_DATE_EPOCH.patch â â .pc/0005-SOURCE_DATE_EPOCH.patch/src â â .pc/0005-SOURCE_DATE_EPOCH.patch/src/mkreleasehdr.sh â â -.pc/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â -.pc/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests â â -.pc/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests/test_helper.tcl â â -.pc/0008-Drop-tests-with-timing-issues.patch â â -.pc/0008-Drop-tests-with-timing-issues.patch/tests â â -.pc/0008-Drop-tests-with-timing-issues.patch/tests/test_helper.tcl â â .pc/applied-patches â â +.pc/debian-packaging â â +.pc/debian-packaging/0003-use-system-jemalloc.patch â â +.pc/debian-packaging/0003-use-system-jemalloc.patch/src â â +.pc/debian-packaging/0003-use-system-jemalloc.patch/src/Makefile â â +.pc/debian-packaging/0003-use-system-jemalloc.patch/src/debug.c â â +.pc/debian-packaging/0003-use-system-jemalloc.patch/src/zmalloc.c â â +.pc/debian-packaging/0003-use-system-jemalloc.patch/src/zmalloc.h â â +.pc/debian-packaging/0004-dpkg-buildflags.patch â â +.pc/debian-packaging/0004-dpkg-buildflags.patch/deps â â +.pc/debian-packaging/0004-dpkg-buildflags.patch/deps/hiredis â â +.pc/debian-packaging/0004-dpkg-buildflags.patch/deps/hiredis/Makefile â â +.pc/debian-packaging/0004-dpkg-buildflags.patch/deps/linenoise â â +.pc/debian-packaging/0004-dpkg-buildflags.patch/deps/linenoise/Makefile â â +.pc/debian-packaging/0004-dpkg-buildflags.patch/src â â +.pc/debian-packaging/0004-dpkg-buildflags.patch/src/Makefile â â +.pc/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â +.pc/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests â â +.pc/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests/test_helper.tcl â â +.pc/debian-packaging/0008-Drop-tests-with-timing-issues.patch â â +.pc/debian-packaging/0008-Drop-tests-with-timing-issues.patch/tests â â +.pc/debian-packaging/0008-Drop-tests-with-timing-issues.patch/tests/test_helper.tcl â â 00-RELEASENOTES â â BUGS â â CONTRIBUTING â â COPYING â â INSTALL â â MANIFESTO â â Makefile â â @@ -52,44 +53,44 @@ â â debian/compat â â debian/control â â debian/copyright â â debian/gbp.conf â â debian/patches â â debian/patches/0001-fix-ftbfs-on-kfreebsd.patch â â debian/patches/0002-fix-ftbfs-on-kfreebsd.patch â â -debian/patches/0003-use-system-jemalloc.patch â â -debian/patches/0004-dpkg-buildflags.patch â â debian/patches/0005-SOURCE_DATE_EPOCH.patch â â -debian/patches/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â -debian/patches/0008-Drop-tests-with-timing-issues.patch â â +debian/patches/debian-packaging â â +debian/patches/debian-packaging/0003-use-system-jemalloc.patch â â +debian/patches/debian-packaging/0004-dpkg-buildflags.patch â â +debian/patches/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â +debian/patches/debian-packaging/0008-Drop-tests-with-timing-issues.patch â â debian/patches/series â â debian/redis-benchmark.1 â â debian/redis-cli.1 â â debian/redis-sentinel.default â â debian/redis-sentinel.init â â debian/redis-sentinel.install â â debian/redis-sentinel.links â â debian/redis-sentinel.logrotate â â debian/redis-sentinel.postinst â â debian/redis-sentinel.postrm â â debian/redis-sentinel.service â â -debian/redis-sentinel.tmpfile â â debian/redis-server.1 â â debian/redis-server.default â â debian/redis-server.docs â â debian/redis-server.init â â debian/redis-server.install â â debian/redis-server.logrotate â â debian/redis-server.manpages â â debian/redis-server.postinst â â debian/redis-server.postrm â â debian/redis-server.service â â -debian/redis-server.tmpfile â â debian/redis-tools.examples â â debian/redis-tools.install â â +debian/redis-tools.links â â debian/redis-tools.manpages â â debian/redis.conf â â debian/rules â â debian/sentinel.conf â â debian/source â â debian/source/format â â debian/source/options âââ .pc âââ file list â â â @@ -4,31 +4,32 @@ â â â 0001-fix-ftbfs-on-kfreebsd.patch â â â 0001-fix-ftbfs-on-kfreebsd.patch/deps â â â 0001-fix-ftbfs-on-kfreebsd.patch/deps/hiredis â â â 0001-fix-ftbfs-on-kfreebsd.patch/deps/hiredis/net.c â â â 0002-fix-ftbfs-on-kfreebsd.patch â â â 0002-fix-ftbfs-on-kfreebsd.patch/src â â â 0002-fix-ftbfs-on-kfreebsd.patch/src/fmacros.h â â â -0003-use-system-jemalloc.patch â â â -0003-use-system-jemalloc.patch/src â â â -0003-use-system-jemalloc.patch/src/Makefile â â â -0003-use-system-jemalloc.patch/src/debug.c â â â -0003-use-system-jemalloc.patch/src/zmalloc.c â â â -0003-use-system-jemalloc.patch/src/zmalloc.h â â â -0004-dpkg-buildflags.patch â â â -0004-dpkg-buildflags.patch/deps â â â -0004-dpkg-buildflags.patch/deps/hiredis â â â -0004-dpkg-buildflags.patch/deps/hiredis/Makefile â â â -0004-dpkg-buildflags.patch/deps/linenoise â â â -0004-dpkg-buildflags.patch/deps/linenoise/Makefile â â â -0004-dpkg-buildflags.patch/src â â â -0004-dpkg-buildflags.patch/src/Makefile â â â 0005-SOURCE_DATE_EPOCH.patch â â â 0005-SOURCE_DATE_EPOCH.patch/src â â â 0005-SOURCE_DATE_EPOCH.patch/src/mkreleasehdr.sh â â â -0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â -0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests â â â -0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests/test_helper.tcl â â â -0008-Drop-tests-with-timing-issues.patch â â â -0008-Drop-tests-with-timing-issues.patch/tests â â â -0008-Drop-tests-with-timing-issues.patch/tests/test_helper.tcl â â â -applied-patches â â â +applied-patches â â â +debian-packaging â â â +debian-packaging/0003-use-system-jemalloc.patch â â â +debian-packaging/0003-use-system-jemalloc.patch/src â â â +debian-packaging/0003-use-system-jemalloc.patch/src/Makefile â â â +debian-packaging/0003-use-system-jemalloc.patch/src/debug.c â â â +debian-packaging/0003-use-system-jemalloc.patch/src/zmalloc.c â â â +debian-packaging/0003-use-system-jemalloc.patch/src/zmalloc.h â â â +debian-packaging/0004-dpkg-buildflags.patch â â â +debian-packaging/0004-dpkg-buildflags.patch/deps â â â +debian-packaging/0004-dpkg-buildflags.patch/deps/hiredis â â â +debian-packaging/0004-dpkg-buildflags.patch/deps/hiredis/Makefile â â â +debian-packaging/0004-dpkg-buildflags.patch/deps/linenoise â â â +debian-packaging/0004-dpkg-buildflags.patch/deps/linenoise/Makefile â â â +debian-packaging/0004-dpkg-buildflags.patch/src â â â +debian-packaging/0004-dpkg-buildflags.patch/src/Makefile â â â +debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â +debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests â â â +debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch/tests/test_helper.tcl â â â +debian-packaging/0008-Drop-tests-with-timing-issues.patch â â â +debian-packaging/0008-Drop-tests-with-timing-issues.patch/tests â â â +debian-packaging/0008-Drop-tests-with-timing-issues.patch/tests/test_helper.tcl âââ stat {} â â â @@ -1,8 +1,8 @@ â â â â â â Size: 4096 Blocks: 8 IO Block: 4096 directory â â â -Links: 9 â â â +Links: 6 â â â Access: (0755/drwxr-xr-x) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â Birth: - âââ applied-patches â â â @@ -1,7 +1,7 @@ â â â 0001-fix-ftbfs-on-kfreebsd.patch â â â 0002-fix-ftbfs-on-kfreebsd.patch â â â -0003-use-system-jemalloc.patch â â â -0004-dpkg-buildflags.patch â â â +debian-packaging/0003-use-system-jemalloc.patch â â â +debian-packaging/0004-dpkg-buildflags.patch â â â 0005-SOURCE_DATE_EPOCH.patch â â â -0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â -0008-Drop-tests-with-timing-issues.patch â â â +debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â +debian-packaging/0008-Drop-tests-with-timing-issues.patch âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 258 Blocks: 8 IO Block: 4096 regular file â â â â + Size: 326 Blocks: 8 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ stat {} â â â @@ -1,8 +1,8 @@ â â â â â â Size: 4096 Blocks: 8 IO Block: 4096 directory â â â -Links: 9 â â â +Links: 6 â â â Access: (0755/drwxr-xr-x) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â Birth: - âââ 00-RELEASENOTES â â @@ -7,14 +7,138 @@ â â LOW: No need to upgrade unless there are new features you want to use. â â MODERATE: Program an upgrade of the server, but it's not urgent. â â HIGH: There is a critical bug that may affect a subset of users. Upgrade! â â CRITICAL: There is a critical bug affecting MOST USERS. Upgrade ASAP. â â -------------------------------------------------------------------------------- â â â â ================================================================================ â â +Redis 3.2.8 Released Sun Feb 12 16:11:18 CET 2017 â â +================================================================================ â â + â â +Upgrade urgency CRITICAL: This release reverts back the Jemalloc upgrade â â + that is believed to potentially cause a server â â + deadlock. A MIGRATE crash is also fixed. â â + â â +Two important bug fixes, the first of one is critical: â â + â â +1. Apparently Jemalloc 4.4.0 may contain a deadlock under particular â â + conditions. See https://github.com/antirez/redis/issues/3799. â â + We reverted back to the previously used Jemalloc versions and plan â â + to upgrade Jemalloc again after having more info about the â â + cause of the bug. â â + â â +2. MIGRATE could crash the server after a socket error. See for reference: â â + https://github.com/antirez/redis/issues/3796. â â + â â +List of commits: â â + â â +antirez in commit 7178cac: â â + Revert "Jemalloc updated to 4.4.0." â â + 150 files changed, 6330 insertions(+), 17245 deletions(-) â â + â â +antirez in commit 33fad43: â â + Fix MIGRATE closing of cached socket on error. â â + 1 file changed, 23 insertions(+), 6 deletions(-) â â + â â +================================================================================ â â +Redis 3.2.7 Released Tue Jan 31 16:21:41 CET 2017 â â +================================================================================ â â + â â +Upgrade urgency HIGH: This release fixes important security and correctness â â + issues. It is especially important to upgrade for Redis â â + Cluster users and for users running Redis in their laptop â â + since a cross-scripting attack is fixed in this release. â â + â â +Main bugs fixes and improvements in this release: â â + â â +1. MIGRATE could incorrectly move keys between Redis Cluster nodes by turning â â + keys with an expire set into persisting keys. This bug was introduced with â â + the multiple-keys migration recently. It is now fixed. Only applies to â â + Redis Cluster users that use the resharding features of Redis Cluster. â â + â â +2. As Redis 4.0 beta and the unstable branch already did (for some months at â â + this point), Redis 3.2.7 also aliases the Host: and POST commands to QUIT â â + avoiding to process the remaining pipeline if there are pending commands. â â + This is a security protection against a "Cross Scripting" attack, that â â + usually involves trying to feed Redis with HTTP in order to execute commands. â â + Example: a developer is running a local copy of Redis for development â â + purposes. She also runs a web browser in the same computer. The web browser â â + could send an HTTP request to http://127.0.0.1:6379 in order to access the â â + Redis instance, since a specially crafted HTTP requesta may also be partially â â + valid Redis protocol. However if POST and Host: break the connection, this â â + problem should be avoided. IMPORTANT: It is important to realize that it â â + is not impossible that another way will be found to talk with a localhost â â + Redis using a Cross Protocol attack not involving sending POST or Host: so â â + this is only a layer of protection but not a definitive fix for this class â â + of issues. â â + â â +3. A ziplist bug that could cause data corruption, could crash the server and â â + MAY ALSO HAVE SECURITY IMPLICATIONS was fixed. The bug looks complex to â â + exploit, but attacks always get worse, never better (cit). The bug is very â â + very hard to catch in practice, it required manual analysis of the ziplist â â + code in order to be found. However it is also possible that rarely it â â + happened in the wild. Upgrading is required if you use LINSERT and other â â + in-the-middle list manipulation commands. â â + â â +4. We upgraded to Jemalloc 4.4.0 since the version we used to ship with Redis â â + was an early 4.0 release of Jemalloc. This version may have several â â + improvements including the ability to better reclaim/use the memory of â â + system. â â + â â +The following is the list of commits: â â + â â +antirez in commit 3876d98: â â + Ziplist: insertion bug under particular conditions fixed. â â + 1 file changed, 9 insertions(+), 1 deletion(-) â â + â â +antirez in commit 153f2f0: â â + Jemalloc updated to 4.4.0. â â + 150 files changed, 17271 insertions(+), 6356 deletions(-) â â + â â +miter in commit ca532c9: â â + Change switch statment to if statment â â + 1 file changed, 2 insertions(+), 4 deletions(-) â â + â â +oranagra in commit a735035: â â + fix rare assertion in DEBUG DIGEST â â + 1 file changed, 1 insertion(+), 1 deletion(-) â â + â â +Itamar Haber in commit b917e3f: â â + Verify pairs are provided after subcommands â â + 1 file changed, 1 insertion(+), 1 deletion(-) â â + â â +antirez in commit 1177cf6: â â + Avoid geo.c warning in initialization. â â + 1 file changed, 1 insertion(+), 1 deletion(-) â â + â â +antirez in commit 874804d: â â + Security: Cross Protocol Scripting protection. â â + 3 files changed, 27 insertions(+), 2 deletions(-) â â + â â +antirez in commit 273cd7f: â â + Ziplist: remove static from functions, they prevent good crash reports. â â + 1 file changed, 14 insertions(+), 14 deletions(-) â â + â â +Jan-Erik Rediger in commit 389b9f5: â â + Initialize help only in repl mode â â + 1 file changed, 5 insertions(+), 5 deletions(-) â â + â â +Yossi Gottlieb in commit 1370a88: â â + Fix redis-cli rare crash. â â + 1 file changed, 4 insertions(+) â â + â â +antirez in commit 68aab8e: â â + MIGRATE: Remove upfront ttl initialization. â â + 1 file changed, 3 insertions(+), 4 deletions(-) â â + â â +Jan-Erik Rediger in commit 788e892: â â + Reset the ttl for additional keys â â + 1 file changed, 1 insertion(+) â â + â â +================================================================================ â â Redis 3.2.6 Released Tue Dec 06 09:33:29 CET 2016 â â ================================================================================ â â â â Upgrade urgency MODERATE: GEORADIUS, BITFIELD and Redis Cluster minor fixes. â â â â This release mainly fixes three bugs: âââ stat {} â â â @@ -1,8 +1,8 @@ â â â â â â - Size: 80406 Blocks: 160 IO Block: 4096 regular file â â â + Size: 85775 Blocks: 168 IO Block: 4096 regular file â â â Links: 1 â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â Birth: - âââ debian âââ file list â â â @@ -7,44 +7,44 @@ â â â compat â â â control â â â copyright â â â gbp.conf â â â patches â â â patches/0001-fix-ftbfs-on-kfreebsd.patch â â â patches/0002-fix-ftbfs-on-kfreebsd.patch â â â -patches/0003-use-system-jemalloc.patch â â â -patches/0004-dpkg-buildflags.patch â â â patches/0005-SOURCE_DATE_EPOCH.patch â â â -patches/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â -patches/0008-Drop-tests-with-timing-issues.patch â â â +patches/debian-packaging â â â +patches/debian-packaging/0003-use-system-jemalloc.patch â â â +patches/debian-packaging/0004-dpkg-buildflags.patch â â â +patches/debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â +patches/debian-packaging/0008-Drop-tests-with-timing-issues.patch â â â patches/series â â â redis-benchmark.1 â â â redis-cli.1 â â â redis-sentinel.default â â â redis-sentinel.init â â â redis-sentinel.install â â â redis-sentinel.links â â â redis-sentinel.logrotate â â â redis-sentinel.postinst â â â redis-sentinel.postrm â â â redis-sentinel.service â â â -redis-sentinel.tmpfile â â â redis-server.1 â â â redis-server.default â â â redis-server.docs â â â redis-server.init â â â redis-server.install â â â redis-server.logrotate â â â redis-server.manpages â â â redis-server.postinst â â â redis-server.postrm â â â redis-server.service â â â -redis-server.tmpfile â â â redis-tools.examples â â â redis-tools.install â â â +redis-tools.links â â â redis-tools.manpages â â â redis.conf â â â rules â â â sentinel.conf â â â source â â â source/format â â â source/options âââ changelog â â â @@ -1,7 +1,78 @@ â â â +redis (3:3.2.8-2) unstable; urgency=medium â â â + â â â + * Avoid conflict between RuntimeDirectory and tmpfiles.d(5) both attempting â â â + to create /run/redis with differing permissions. â â â + â â â + This prevents an installation error on Jessie where /run/redis was first â â â + being created by the tmpfiles.d(5) mechanism and then subsequently via the â â â + RuntimeDirectory directive. Due to a bug in Jessie's systemd, this caused a â â â + package installation error as systemd was too strict about permissions if â â â + the target already exists: <https://github.com/systemd/systemd/pull/896> â â â + â â â + The redis-{server,sentinel} daemon would actually start successfully a few â â â + milliseconds later due to the Restart=always directive. â â â + â â â + We work around this this by dropping the tmpfiles.d(5) handling and moving â â â + entirely to RuntimeDirectory{,Mode}; we are not using any special handling â â â + requiring tmpfiles.d(5) and we appear to need RuntimeDirectory anyway for â â â + #846350. (Closes: #856116) â â â + â â â + -- Chris Lamb <la...@debian.org> Sat, 11 Mar 2017 12:53:14 +0000 â â â + â â â +redis (3:3.2.8-1) unstable; urgency=medium â â â + â â â + * New upstream release. â â â + â â â + -- Chris Lamb <la...@debian.org> Mon, 13 Feb 2017 10:15:53 +1300 â â â + â â â +redis (3:3.2.7-1) unstable; urgency=medium â â â + â â â + * New upstream release. â â â + â â â + -- Chris Lamb <la...@debian.org> Wed, 01 Feb 2017 09:27:05 +1300 â â â + â â â +redis (3:3.2.6-6) unstable; urgency=medium â â â + â â â + * Use --cpu-list 0 (not --cpu-list 1) to ensure compilation on single-CPU â â â + machines. (Closes: #852347) â â â + â â â + -- Chris Lamb <la...@debian.org> Tue, 24 Jan 2017 11:59:02 +1300 â â â + â â â +redis (3:3.2.6-5) unstable; urgency=medium â â â + â â â + * Re-add taskset calls to try and avoid FTBFS due to parallelism in upstream â â â + test suite. â â â + â â â + -- Chris Lamb <la...@debian.org> Mon, 23 Jan 2017 13:24:39 +1300 â â â + â â â +redis (3:3.2.6-4) unstable; urgency=medium â â â + â â â + * Expand the documentation in redis-server.service and redis-sentinel â â â + regarding the default hardening options. â â â + â â â + -- Chris Lamb <la...@debian.org> Sat, 21 Jan 2017 11:21:33 +1100 â â â + â â â +redis (3:3.2.6-3) unstable; urgency=medium â â â + â â â + * Don't ship a "duplicate" redis-server binary in redis-tools as â â â + /usr/bin/redis-check-rdb (it checks argv to change its behaviour) by â â â + replacing it with a symlink. Found by <https://dedup.debian.net/>. â â â + â â â + -- Chris Lamb <la...@debian.org> Wed, 11 Jan 2017 17:04:33 +0000 â â â + â â â +redis (3:3.2.6-2) unstable; urgency=medium â â â + â â â + * Rename RunTimeDirectory -> RuntimeDirectory in .service files. â â â + (Closes: #850534) â â â + * Refresh all patches with pq import -> pq export. â â â + * Tidy all patches, updating descriptions and use Pq-Topic to organise. â â â + â â â + -- Chris Lamb <la...@debian.org> Sat, 07 Jan 2017 18:06:14 +0000 â â â + â â â redis (3:3.2.6-1) unstable; urgency=medium â â â â â â * New upstream release. â â â * Add debian/gbp.conf to reflect new repository layout. â â â â â â -- Chris Lamb <la...@debian.org> Tue, 06 Dec 2016 09:23:20 +0000 âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 35243 Blocks: 72 IO Block: 4096 regular file â â â â + Size: 37877 Blocks: 80 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ patches âââ file list â â â â @@ -1,8 +1,9 @@ â â â â 0001-fix-ftbfs-on-kfreebsd.patch â â â â 0002-fix-ftbfs-on-kfreebsd.patch â â â â -0003-use-system-jemalloc.patch â â â â -0004-dpkg-buildflags.patch â â â â 0005-SOURCE_DATE_EPOCH.patch â â â â -0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â â -0008-Drop-tests-with-timing-issues.patch â â â â +debian-packaging â â â â +debian-packaging/0003-use-system-jemalloc.patch â â â â +debian-packaging/0004-dpkg-buildflags.patch â â â â +debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â â +debian-packaging/0008-Drop-tests-with-timing-issues.patch â â â â series âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â Size: 4096 Blocks: 8 IO Block: 4096 directory â â â â -Links: 2 â â â â +Links: 3 â â â â Access: (0755/drwxr-xr-x) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ 0001-fix-ftbfs-on-kfreebsd.patch â â â â @@ -1,21 +1,21 @@ â â â â From: Chris Lamb <la...@debian.org> â â â â Date: Fri, 30 Oct 2015 10:53:42 +0000 â â â â -Subject: fix-ftbfs-on-kfreebsd â â â â +Subject: Fix FTBFS on kfreebsd â â â â â â â â -# Description: Fix FTBFS on kfreebsd â â â â -# Bug: https://github.com/redis/hiredis/pull/254 â â â â -# Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754634 â â â â -# Author: Chris Lamb <la...@debian.org> â â â â +Filed and fixed upstream as <https://github.com/redis/hiredis/pull/254>, but â â â â +the embedded code copy of hiredis in redis has not been updated. â â â â + â â â â +Debian bug: #754634 â â â â --- â â â â deps/hiredis/net.c | 2 +- â â â â 1 file changed, 1 insertion(+), 1 deletion(-) â â â â â â â â diff --git a/deps/hiredis/net.c b/deps/hiredis/net.c â â â â -index bdb84ce..ff4e77f 100644 â â â â +index bdb84cee..ff4e77f1 100644 â â â â --- a/deps/hiredis/net.c â â â â +++ b/deps/hiredis/net.c â â â â @@ -138,7 +138,7 @@ int redisKeepAlive(redisContext *c, int interval) { â â â â return REDIS_ERR; â â â â } â â â â #else â â â â -#ifndef __sun âââ stat {} â â â â â @@ -1,8 +1,8 @@ â â â â â â â â â â - Size: 857 Blocks: 8 IO Block: 4096 regular file â â â â â + Size: 826 Blocks: 8 IO Block: 4096 regular file â â â â â Links: 1 â â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â â â Birth: - âââ 0002-fix-ftbfs-on-kfreebsd.patch â â â â @@ -1,21 +1,20 @@ â â â â -From: Chris Lamb <la...@debian.org> â â â â +From: Christoph Egger <christ...@debian.org> â â â â Date: Fri, 30 Oct 2015 10:53:42 +0000 â â â â -Subject: fix-ftbfs-on-kfreebsd â â â â +Subject: Fix FTBFS on kfreebsd â â â â â â â â -# Description: Fix FTBFS on kfreebsd â â â â -# Bug: https://github.com/antirez/redis/pull/67 â â â â -# Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=632499 â â â â -# Author: Christoph Egger <christ...@debian.org> â â â â +Filed upstream as <https://github.com/antirez/redis/pull/67>. â â â â + â â â â +Debian bug: #632499 â â â â --- â â â â src/fmacros.h | 2 +- â â â â 1 file changed, 1 insertion(+), 1 deletion(-) â â â â â â â â diff --git a/src/fmacros.h b/src/fmacros.h â â â â -index 6e56c75..d490aec 100644 â â â â +index 6e56c759..d490aec2 100644 â â â â --- a/src/fmacros.h â â â â +++ b/src/fmacros.h â â â â @@ -41,7 +41,7 @@ â â â â #define _ALL_SOURCE â â â â #endif â â â â â â â â -#if defined(__linux__) || defined(__OpenBSD__) âââ stat {} â â â â â @@ -1,8 +1,8 @@ â â â â â â â â â â - Size: 753 Blocks: 8 IO Block: 4096 regular file â â â â â + Size: 643 Blocks: 8 IO Block: 4096 regular file â â â â â Links: 1 â â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â â â Birth: - âââ 0005-SOURCE_DATE_EPOCH.patch â â â â @@ -1,17 +1,18 @@ â â â â From: Chris Lamb <la...@debian.org> â â â â Date: Wed, 6 Jan 2016 11:23:26 +0000 â â â â -Subject: SOURCE_DATE_EPOCH â â â â +Subject: Add support for SOURCE_DATE_EPOCH. â â â â â â â â +Filed upstream as <https://github.com/antirez/redis/pull/2992>. â â â â --- â â â â src/mkreleasehdr.sh | 3 +++ â â â â 1 file changed, 3 insertions(+) â â â â â â â â diff --git a/src/mkreleasehdr.sh b/src/mkreleasehdr.sh â â â â -index 1ae9588..e6d558b 100755 â â â â +index 1ae95886..e6d558b1 100755 â â â â --- a/src/mkreleasehdr.sh â â â â +++ b/src/mkreleasehdr.sh â â â â @@ -2,6 +2,9 @@ â â â â GIT_SHA1=`(git show-ref --head --hash=8 2> /dev/null || echo 00000000) | head -n1` â â â â GIT_DIRTY=`git diff --no-ext-diff 2> /dev/null | wc -l` â â â â BUILD_ID=`uname -n`"-"`date +%s` â â â â +if [ -n "$SOURCE_DATE_EPOCH" ]; then âââ stat {} â â â â â @@ -1,8 +1,8 @@ â â â â â â â â â â - Size: 835 Blocks: 8 IO Block: 4096 regular file â â â â â + Size: 918 Blocks: 8 IO Block: 4096 regular file â â â â â Links: 1 â â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â â â Birth: - âââ series â â â â @@ -1,7 +1,7 @@ â â â â 0001-fix-ftbfs-on-kfreebsd.patch â â â â 0002-fix-ftbfs-on-kfreebsd.patch â â â â -0003-use-system-jemalloc.patch â â â â -0004-dpkg-buildflags.patch â â â â +debian-packaging/0003-use-system-jemalloc.patch â â â â +debian-packaging/0004-dpkg-buildflags.patch â â â â 0005-SOURCE_DATE_EPOCH.patch â â â â -0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â â -0008-Drop-tests-with-timing-issues.patch â â â â +debian-packaging/0006-Skip-logging-tests-as-not-all-architectures-support-.patch â â â â +debian-packaging/0008-Drop-tests-with-timing-issues.patch âââ stat {} â â â â â @@ -1,8 +1,8 @@ â â â â â â â â â â - Size: 258 Blocks: 8 IO Block: 4096 regular file â â â â â + Size: 326 Blocks: 8 IO Block: 4096 regular file â â â â â Links: 1 â â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â â â Birth: - âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â Size: 4096 Blocks: 8 IO Block: 4096 directory â â â â -Links: 2 â â â â +Links: 3 â â â â Access: (0755/drwxr-xr-x) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ redis-sentinel.service â â â @@ -7,15 +7,16 @@ â â â Type=forking â â â ExecStart=/usr/bin/redis-sentinel /etc/redis/sentinel.conf â â â PIDFile=/var/run/redis/redis-sentinel.pid â â â TimeoutStopSec=0 â â â Restart=always â â â User=redis â â â Group=redis â â â -RunTimeDirectory=redis â â â +RuntimeDirectory=redis â â â +RuntimeDirectoryMode=2755 â â â â â â ExecStartPre=-/bin/run-parts --verbose /etc/redis/redis-sentinel.pre-up.d â â â ExecStartPost=-/bin/run-parts --verbose /etc/redis/redis-sentinel.post-up.d â â â ExecStop=-/bin/run-parts --verbose /etc/redis/redis-sentinel.pre-down.d â â â ExecStop=/bin/kill -s TERM $MAINPID â â â ExecStopPost=-/bin/run-parts --verbose /etc/redis/redis-sentinel.post-down.d â â â â â â @@ -26,14 +27,15 @@ â â â ProtectHome=yes â â â ReadOnlyDirectories=/ â â â ReadWriteDirectories=-/var/lib/redis â â â ReadWriteDirectories=-/var/log/redis â â â ReadWriteDirectories=-/var/run/redis â â â CapabilityBoundingSet=~CAP_SYS_PTRACE â â â â â â -# redis-sentinel writes its own config file so we allow writing there (NB. â â â -# ProtectSystem=true over ProtectSystem=full) â â â +# redis-sentinel writes to its own config file when in cluster mode so we â â â +# permit writing there by default. If you are *not* using this feature, it is â â â +# recommended that you replace the following lines with "ProtectSystem=full". â â â ProtectSystem=true â â â ReadWriteDirectories=-/etc/redis â â â â â â [Install] â â â WantedBy=multi-user.target âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 1133 Blocks: 8 IO Block: 4096 regular file â â â â + Size: 1268 Blocks: 8 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ redis-server.service â â â @@ -7,15 +7,16 @@ â â â Type=forking â â â ExecStart=/usr/bin/redis-server /etc/redis/redis.conf â â â PIDFile=/var/run/redis/redis-server.pid â â â TimeoutStopSec=0 â â â Restart=always â â â User=redis â â â Group=redis â â â -RunTimeDirectory=redis â â â +RuntimeDirectory=redis â â â +RuntimeDirectoryMode=2755 â â â â â â ExecStartPre=-/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d â â â ExecStartPost=-/bin/run-parts --verbose /etc/redis/redis-server.post-up.d â â â ExecStop=-/bin/run-parts --verbose /etc/redis/redis-server.pre-down.d â â â ExecStop=/bin/kill -s TERM $MAINPID â â â ExecStopPost=-/bin/run-parts --verbose /etc/redis/redis-server.post-down.d â â â â â â @@ -26,15 +27,16 @@ â â â ProtectHome=yes â â â ReadOnlyDirectories=/ â â â ReadWriteDirectories=-/var/lib/redis â â â ReadWriteDirectories=-/var/log/redis â â â ReadWriteDirectories=-/var/run/redis â â â CapabilityBoundingSet=~CAP_SYS_PTRACE â â â â â â -# redis-server writes its own config file when in cluster mode so we allow â â â -# writing there (NB. ProtectSystem=true over ProtectSystem=full) â â â +# redis-server can write to its own config file when in cluster mode so we â â â +# permit writing there by default. If you are not using this feature, it is â â â +# recommended that you replace the following lines with "ProtectSystem=full". â â â ProtectSystem=true â â â ReadWriteDirectories=-/etc/redis â â â â â â [Install] â â â WantedBy=multi-user.target â â â Alias=redis.service âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 1155 Blocks: 8 IO Block: 4096 regular file â â â â + Size: 1270 Blocks: 8 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ redis-tools.install â â â @@ -1,5 +1,4 @@ â â â debian/bash_completion.d /usr/share/bash-completion/completions â â â src/redis-benchmark /usr/bin â â â src/redis-check-aof /usr/bin â â â -src/redis-check-rdb /usr/bin â â â src/redis-cli /usr/bin âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 176 Blocks: 8 IO Block: 4096 regular file â â â â + Size: 147 Blocks: 8 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ rules â â â @@ -24,16 +24,16 @@ â â â â â â override_dh_auto_build: â â â dh_auto_build --parallel -- V=1 â â â â â â override_dh_auto_test: â â â ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) â â â # Avoid race conditions in upstream testsuite. (#830500) â â â - ./runtest â â â - ./runtest-sentinel â â â + taskset --cpu-list 0 ./runtest â â â + taskset --cpu-list 0 ./runtest-sentinel â â â endif â â â â â â override_dh_compress: â â â dh_compress -Xredis-trib.rb â â â â â â clean: â â â dh $@ âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 906 Blocks: 8 IO Block: 4096 regular file â â â â + Size: 948 Blocks: 8 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0755/-rwxr-xr-x) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ src âââ cluster.c â â â @@ -4648,30 +4648,29 @@ â â â * â â â * MIGRATE host port "" dbid timeout [COPY | REPLACE] KEYS key1 key2 ... keyN */ â â â void migrateCommand(client *c) { â â â migrateCachedSocket *cs; â â â int copy, replace, j; â â â long timeout; â â â long dbid; â â â - long long ttl, expireat; â â â robj **ov = NULL; /* Objects to migrate. */ â â â robj **kv = NULL; /* Key names. */ â â â robj **newargv = NULL; /* Used to rewrite the command as DEL ... keys ... */ â â â rio cmd, payload; â â â int may_retry = 1; â â â int write_error = 0; â â â + int argv_rewritten = 0; â â â â â â /* To support the KEYS option we need the following additional state. */ â â â int first_key = 3; /* Argument index of the first key. */ â â â int num_keys = 1; /* By default only migrate the 'key' argument. */ â â â â â â /* Initialization */ â â â copy = 0; â â â replace = 0; â â â - ttl = 0; â â â â â â /* Parse additional options */ â â â for (j = 6; j < c->argc; j++) { â â â if (!strcasecmp(c->argv[j]->ptr,"copy")) { â â â copy = 1; â â â } else if (!strcasecmp(c->argv[j]->ptr,"replace")) { â â â replace = 1; â â â @@ -4739,15 +4738,17 @@ â â â serverAssertWithInfo(c,NULL,rioWriteBulkCount(&cmd,'*',2)); â â â serverAssertWithInfo(c,NULL,rioWriteBulkString(&cmd,"SELECT",6)); â â â serverAssertWithInfo(c,NULL,rioWriteBulkLongLong(&cmd,dbid)); â â â } â â â â â â /* Create RESTORE payload and generate the protocol to call the command. */ â â â for (j = 0; j < num_keys; j++) { â â â - expireat = getExpire(c->db,kv[j]); â â â + long long ttl = 0; â â â + long long expireat = getExpire(c->db,kv[j]); â â â + â â â if (expireat != -1) { â â â ttl = expireat-mstime(); â â â if (ttl < 1) ttl = 1; â â â } â â â serverAssertWithInfo(c,NULL,rioWriteBulkCount(&cmd,'*',replace ? 5 : 4)); â â â if (server.cluster_enabled) â â â serverAssertWithInfo(c,NULL, â â â @@ -4837,58 +4838,74 @@ â â â * and we failed to read the first reply (j == 0 test). */ â â â if (!error_from_target && socket_error && j == 0 && may_retry && â â â errno != ETIMEDOUT) â â â { â â â goto socket_err; /* A retry is guaranteed because of tested conditions.*/ â â â } â â â â â â + /* On socket errors, close the migration socket now that we still have â â â + * the original host/port in the ARGV. Later the original command may be â â â + * rewritten to DEL and will be too later. */ â â â + if (socket_error) migrateCloseSocket(c->argv[1],c->argv[2]); â â â + â â â if (!copy) { â â â - /* Translate MIGRATE as DEL for replication/AOF. */ â â â + /* Translate MIGRATE as DEL for replication/AOF. Note that we do â â â + * this only for the keys for which we received an acknowledgement â â â + * from the receiving Redis server, by using the del_idx index. */ â â â if (del_idx > 1) { â â â newargv[0] = createStringObject("DEL",3); â â â /* Note that the following call takes ownership of newargv. */ â â â replaceClientCommandVector(c,del_idx,newargv); â â â + argv_rewritten = 1; â â â } else { â â â /* No key transfer acknowledged, no need to rewrite as DEL. */ â â â zfree(newargv); â â â } â â â newargv = NULL; /* Make it safe to call zfree() on it in the future. */ â â â } â â â â â â /* If we are here and a socket error happened, we don't want to retry. â â â - * Just signal the problem to the client, but only do it if we don't â â â - * already queued a different error reported by the destination server. */ â â â + * Just signal the problem to the client, but only do it if we did not â â â + * already queue a different error reported by the destination server. */ â â â if (!error_from_target && socket_error) { â â â may_retry = 0; â â â goto socket_err; â â â } â â â â â â if (!error_from_target) { â â â /* Success! Update the last_dbid in migrateCachedSocket, so that we can â â â - * avoid SELECT the next time if the target DB is the same. Reply +OK. */ â â â + * avoid SELECT the next time if the target DB is the same. Reply +OK. â â â + * â â â + * Note: If we reached this point, even if socket_error is true â â â + * still the SELECT command succeeded (otherwise the code jumps to â â â + * socket_err label. */ â â â cs->last_dbid = dbid; â â â addReply(c,shared.ok); â â â } else { â â â /* On error we already sent it in the for loop above, and set â â â * the curretly selected socket to -1 to force SELECT the next time. */ â â â } â â â â â â sdsfree(cmd.io.buffer.ptr); â â â zfree(ov); zfree(kv); zfree(newargv); â â â - if (socket_error) migrateCloseSocket(c->argv[1],c->argv[2]); â â â return; â â â â â â /* On socket errors we try to close the cached socket and try again. â â â * It is very common for the cached socket to get closed, if just reopening â â â * it works it's a shame to notify the error to the caller. */ â â â socket_err: â â â /* Cleanup we want to perform in both the retry and no retry case. â â â * Note: Closing the migrate socket will also force SELECT next time. */ â â â sdsfree(cmd.io.buffer.ptr); â â â - migrateCloseSocket(c->argv[1],c->argv[2]); â â â + â â â + /* If the command was rewritten as DEL and there was a socket error, â â â + * we already closed the socket earlier. While migrateCloseSocket() â â â + * is idempotent, the host/port arguments are now gone, so don't do it â â â + * again. */ â â â + if (!argv_rewritten) migrateCloseSocket(c->argv[1],c->argv[2]); â â â zfree(newargv); â â â newargv = NULL; /* This will get reallocated on retry. */ â â â â â â /* Retry only if it's not a timeout and we never attempted a retry â â â * (or the code jumping here did not set may_retry to zero). */ â â â if (errno != ETIMEDOUT && may_retry) { â â â may_retry = 0; âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 206987 Blocks: 408 IO Block: 4096 regular file â â â â + Size: 207856 Blocks: 408 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ debug.c â â â @@ -122,15 +122,15 @@ â â â â â â memset(final,0,20); /* Start with a clean result */ â â â â â â for (j = 0; j < server.dbnum; j++) { â â â redisDb *db = server.db+j; â â â â â â if (dictSize(db->dict) == 0) continue; â â â - di = dictGetIterator(db->dict); â â â + di = dictGetSafeIterator(db->dict); â â â â â â /* hash the DB id, so the same dataset moved in a different â â â * DB will lead to a different digest */ â â â aux = htonl(j); â â â mixDigest(final,&aux,sizeof(aux)); â â â â â â /* Iterate this DB writing every entry */ âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 46049 Blocks: 96 IO Block: 4096 regular file â â â â + Size: 46053 Blocks: 96 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ geo.c â â â @@ -348,15 +348,15 @@ â â â continue; â â â } â â â â â â /* Debugging info. */ â â â if (debugmsg) { â â â GeoHashRange long_range, lat_range; â â â geohashGetCoordRange(&long_range,&lat_range); â â â - GeoHashArea myarea = {{0}}; â â â + GeoHashArea myarea = {{0,0},{0,0},{0,0}}; â â â geohashDecode(long_range, lat_range, neighbors[i], &myarea); â â â â â â /* Dump center square. */ â â â D("neighbors[%d]:\n",i); â â â D("area.longitude.min: %f\n", myarea.longitude.min); â â â D("area.longitude.max: %f\n", myarea.longitude.max); â â â D("area.latitude.min: %f\n", myarea.latitude.min); âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 29757 Blocks: 64 IO Block: 4096 regular file â â â â + Size: 29771 Blocks: 64 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ networking.c â â â @@ -1265,16 +1265,18 @@ â â â if (!(c->flags & CLIENT_SLAVE) && clientsArePaused()) break; â â â â â â /* Immediately abort if the client is in the middle of something. */ â â â if (c->flags & CLIENT_BLOCKED) break; â â â â â â /* CLIENT_CLOSE_AFTER_REPLY closes the connection once the reply is â â â * written to the client. Make sure to not let the reply grow after â â â - * this flag has been set (i.e. don't process more commands). */ â â â - if (c->flags & CLIENT_CLOSE_AFTER_REPLY) break; â â â + * this flag has been set (i.e. don't process more commands). â â â + * â â â + * The same applies for clients we want to terminate ASAP. */ â â â + if (c->flags & (CLIENT_CLOSE_AFTER_REPLY|CLIENT_CLOSE_ASAP)) break; â â â â â â /* Determine request type when unknown. */ â â â if (!c->reqtype) { â â â if (c->querybuf[0] == '*') { â â â c->reqtype = PROTO_REQ_MULTIBULK; â â â } else { â â â c->reqtype = PROTO_REQ_INLINE; â â â @@ -1633,14 +1635,34 @@ â â â pauseClients(duration); â â â addReply(c,shared.ok); â â â } else { â â â addReplyError(c, "Syntax error, try CLIENT (LIST | KILL | GETNAME | SETNAME | PAUSE | REPLY)"); â â â } â â â } â â â â â â +/* This callback is bound to POST and "Host:" command names. Those are not â â â + * really commands, but are used in security attacks in order to talk to â â â + * Redis instances via HTTP, with a technique called "cross protocol scripting" â â â + * which exploits the fact that services like Redis will discard invalid â â â + * HTTP headers and will process what follows. â â â + * â â â + * As a protection against this attack, Redis will terminate the connection â â â + * when a POST or "Host:" header is seen, and will log the event from â â â + * time to time (to avoid creating a DOS as a result of too many logs). */ â â â +void securityWarningCommand(client *c) { â â â + static time_t logged_time; â â â + time_t now = time(NULL); â â â + â â â + if (labs(now-logged_time) > 60) { â â â + serverLog(LL_WARNING,"Possible SECURITY ATTACK detected. It looks like somebody is sending POST or Host: commands to Redis. This is likely due to an attacker attempting to use Cross Protocol Scripting to compromise your Redis instance. Connection aborted."); â â â + logged_time = now; â â â + } â â â + freeClientAsync(c); â â â +} â â â + â â â /* Rewrite the command vector of the client. All the new objects ref count â â â * is incremented. The old command vector is freed, and the old objects â â â * ref count is decremented. */ â â â void rewriteClientCommandVector(client *c, int argc, ...) { â â â va_list ap; â â â int j; â â â robj **argv; /* The new argument vector */ âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 70629 Blocks: 144 IO Block: 4096 regular file â â â â + Size: 71766 Blocks: 144 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ object.c â â â @@ -237,19 +237,17 @@ â â â void freeStringObject(robj *o) { â â â if (o->encoding == OBJ_ENCODING_RAW) { â â â sdsfree(o->ptr); â â â } â â â } â â â â â â void freeListObject(robj *o) { â â â - switch (o->encoding) { â â â - case OBJ_ENCODING_QUICKLIST: â â â + if (o->encoding == OBJ_ENCODING_QUICKLIST) { â â â quicklistRelease(o->ptr); â â â - break; â â â - default: â â â + } else { â â â serverPanic("Unknown list encoding type"); â â â } â â â } â â â â â â void freeSetObject(robj *o) { â â â switch (o->encoding) { â â â case OBJ_ENCODING_HT: âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 23224 Blocks: 48 IO Block: 4096 regular file â â â â + Size: 23198 Blocks: 48 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ redis-cli.c â â â @@ -271,14 +271,18 @@ â â â redisReply *reply = redisCommand(context, "COMMAND"); â â â if(reply == NULL || reply->type != REDIS_REPLY_ARRAY) return; â â â â â â /* Scan the array reported by COMMAND and fill only the entries that â â â * don't already match what we have. */ â â â for (size_t j = 0; j < reply->elements; j++) { â â â redisReply *entry = reply->element[j]; â â â + if (entry->type != REDIS_REPLY_ARRAY || entry->elements < 4 || â â â + entry->element[0]->type != REDIS_REPLY_STRING || â â â + entry->element[1]->type != REDIS_REPLY_INTEGER || â â â + entry->element[3]->type != REDIS_REPLY_INTEGER) return; â â â char *cmdname = entry->element[0]->str; â â â int i; â â â â â â for (i = 0; i < helpEntriesLen; i++) { â â â helpEntry *he = helpEntries+i; â â â if (!strcasecmp(he->argv[0],cmdname)) â â â break; â â â @@ -1263,14 +1267,19 @@ â â â static void repl(void) { â â â sds historyfile = NULL; â â â int history = 0; â â â char *line; â â â int argc; â â â sds *argv; â â â â â â + /* Initialize the help and, if possible, use the COMMAND command in order â â â + * to retrieve missing entries. */ â â â + cliInitHelp(); â â â + cliIntegrateHelp(); â â â + â â â config.interactive = 1; â â â linenoiseSetMultiLine(1); â â â linenoiseSetCompletionCallback(completionCallback); â â â linenoiseSetHintsCallback(hintsCallback); â â â linenoiseSetFreeHintsCallback(freeHintsCallback); â â â â â â /* Only use history and load the rc file when stdin is a tty. */ â â â @@ -2593,19 +2602,14 @@ â â â config.output = OUTPUT_STANDARD; â â â config.mb_delim = sdsnew("\n"); â â â â â â firstarg = parseOptions(argc,argv); â â â argc -= firstarg; â â â argv += firstarg; â â â â â â - /* Initialize the help and, if possible, use the COMMAND command in order â â â - * to retrieve missing entries. */ â â â - cliInitHelp(); â â â - cliIntegrateHelp(); â â â - â â â /* Latency mode */ â â â if (config.latency_mode) { â â â if (cliConnect(0) == REDIS_ERR) exit(1); â â â latencyMode(); â â â } â â â â â â /* Latency distribution mode */ âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 90077 Blocks: 176 IO Block: 4096 regular file â â â â + Size: 90339 Blocks: 184 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ server.c â â â @@ -290,14 +290,16 @@ â â â {"geopos",geoposCommand,-2,"r",0,NULL,1,1,1,0,0}, â â â {"geodist",geodistCommand,-4,"r",0,NULL,1,1,1,0,0}, â â â {"pfselftest",pfselftestCommand,1,"a",0,NULL,0,0,0,0,0}, â â â {"pfadd",pfaddCommand,-2,"wmF",0,NULL,1,1,1,0,0}, â â â {"pfcount",pfcountCommand,-2,"r",0,NULL,1,-1,1,0,0}, â â â {"pfmerge",pfmergeCommand,-2,"wm",0,NULL,1,-1,1,0,0}, â â â {"pfdebug",pfdebugCommand,-3,"w",0,NULL,0,0,0,0,0}, â â â + {"post",securityWarningCommand,-1,"lt",0,NULL,0,0,0,0,0}, â â â + {"host:",securityWarningCommand,-1,"lt",0,NULL,0,0,0,0,0}, â â â {"latency",latencyCommand,-2,"aslt",0,NULL,0,0,0,0,0} â â â }; â â â â â â struct evictionPoolEntry *evictionPoolAlloc(void); â â â â â â /*============================ Utility functions ============================ */ âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 162619 Blocks: 320 IO Block: 4096 regular file â â â â + Size: 162744 Blocks: 320 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ server.h â â â @@ -1641,14 +1641,15 @@ â â â void geodistCommand(client *c); â â â void pfselftestCommand(client *c); â â â void pfaddCommand(client *c); â â â void pfcountCommand(client *c); â â â void pfmergeCommand(client *c); â â â void pfdebugCommand(client *c); â â â void latencyCommand(client *c); â â â +void securityWarningCommand(client *c); â â â â â â #if defined(__GNUC__) â â â void *calloc(size_t count, size_t size) __attribute__ ((deprecated)); â â â void free(void *ptr) __attribute__ ((deprecated)); â â â void *malloc(size_t size) __attribute__ ((deprecated)); â â â void *realloc(void *ptr, size_t size) __attribute__ ((deprecated)); â â â #endif âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 74429 Blocks: 152 IO Block: 4096 regular file â â â â + Size: 74469 Blocks: 152 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ t_zset.c â â â @@ -1243,15 +1243,15 @@ â â â int nx = (flags & ZADD_NX) != 0; â â â int xx = (flags & ZADD_XX) != 0; â â â int ch = (flags & ZADD_CH) != 0; â â â â â â /* After the options, we expect to have an even number of args, since â â â * we expect any number of score-element pairs. */ â â â elements = c->argc-scoreidx; â â â - if (elements % 2) { â â â + if (elements % 2 || !elements) { â â â addReply(c,shared.syntaxerr); â â â return; â â â } â â â elements /= 2; /* Now this holds the number of score-element pairs. */ â â â â â â /* Check for incompatible options. */ â â â if (nx && xx) { âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 96252 Blocks: 192 IO Block: 4096 regular file â â â â + Size: 96265 Blocks: 192 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: - âââ version.h â â â @@ -1 +1 @@ â â â -#define REDIS_VERSION "3.2.6" â â â +#define REDIS_VERSION "3.2.8" âââ ziplist.c â â â @@ -176,30 +176,30 @@ â â â (encoding) = (ptr[0]); \ â â â if ((encoding) < ZIP_STR_MASK) (encoding) &= ZIP_STR_MASK; \ â â â } while(0) â â â â â â void ziplistRepr(unsigned char *zl); â â â â â â /* Return bytes needed to store integer encoded by 'encoding' */ â â â -static unsigned int zipIntSize(unsigned char encoding) { â â â +unsigned int zipIntSize(unsigned char encoding) { â â â switch(encoding) { â â â case ZIP_INT_8B: return 1; â â â case ZIP_INT_16B: return 2; â â â case ZIP_INT_24B: return 3; â â â case ZIP_INT_32B: return 4; â â â case ZIP_INT_64B: return 8; â â â default: return 0; /* 4 bit immediate */ â â â } â â â assert(NULL); â â â return 0; â â â } â â â â â â /* Encode the length 'rawlen' writing it in 'p'. If p is NULL it just returns â â â * the amount of bytes required to encode such a length. */ â â â -static unsigned int zipEncodeLength(unsigned char *p, unsigned char encoding, unsigned int rawlen) { â â â +unsigned int zipEncodeLength(unsigned char *p, unsigned char encoding, unsigned int rawlen) { â â â unsigned char len = 1, buf[5]; â â â â â â if (ZIP_IS_STR(encoding)) { â â â /* Although encoding is given it may not be set for strings, â â â * so we determine it here using the raw length. */ â â â if (rawlen <= 0x3f) { â â â if (!p) return len; â â â @@ -255,15 +255,15 @@ â â â (lensize) = 1; \ â â â (len) = zipIntSize(encoding); \ â â â } \ â â â } while(0); â â â â â â /* Encode the length of the previous entry and write it to "p". Return the â â â * number of bytes needed to encode this length if "p" is NULL. */ â â â -static unsigned int zipPrevEncodeLength(unsigned char *p, unsigned int len) { â â â +unsigned int zipPrevEncodeLength(unsigned char *p, unsigned int len) { â â â if (p == NULL) { â â â return (len < ZIP_BIGLEN) ? 1 : sizeof(len)+1; â â â } else { â â â if (len < ZIP_BIGLEN) { â â â p[0] = len; â â â return 1; â â â } else { â â â @@ -273,15 +273,15 @@ â â â return 1+sizeof(len); â â â } â â â } â â â } â â â â â â /* Encode the length of the previous entry and write it to "p". This only â â â * uses the larger encoding (required in __ziplistCascadeUpdate). */ â â â -static void zipPrevEncodeLengthForceLarge(unsigned char *p, unsigned int len) { â â â +void zipPrevEncodeLengthForceLarge(unsigned char *p, unsigned int len) { â â â if (p == NULL) return; â â â p[0] = ZIP_BIGLEN; â â â memcpy(p+1,&len,sizeof(len)); â â â memrev32ifbe(p+1); â â â } â â â â â â /* Decode the number of bytes required to store the length of the previous â â â @@ -305,31 +305,31 @@ â â â memcpy(&(prevlen), ((char*)(ptr)) + 1, 4); \ â â â memrev32ifbe(&prevlen); \ â â â } \ â â â } while(0); â â â â â â /* Return the difference in number of bytes needed to store the length of the â â â * previous element 'len', in the entry pointed to by 'p'. */ â â â -static int zipPrevLenByteDiff(unsigned char *p, unsigned int len) { â â â +int zipPrevLenByteDiff(unsigned char *p, unsigned int len) { â â â unsigned int prevlensize; â â â ZIP_DECODE_PREVLENSIZE(p, prevlensize); â â â return zipPrevEncodeLength(NULL, len) - prevlensize; â â â } â â â â â â /* Return the total number of bytes used by the entry pointed to by 'p'. */ â â â -static unsigned int zipRawEntryLength(unsigned char *p) { â â â +unsigned int zipRawEntryLength(unsigned char *p) { â â â unsigned int prevlensize, encoding, lensize, len; â â â ZIP_DECODE_PREVLENSIZE(p, prevlensize); â â â ZIP_DECODE_LENGTH(p + prevlensize, encoding, lensize, len); â â â return prevlensize + lensize + len; â â â } â â â â â â /* Check if string pointed to by 'entry' can be encoded as an integer. â â â * Stores the integer value in 'v' and its encoding in 'encoding'. */ â â â -static int zipTryEncoding(unsigned char *entry, unsigned int entrylen, long long *v, unsigned char *encoding) { â â â +int zipTryEncoding(unsigned char *entry, unsigned int entrylen, long long *v, unsigned char *encoding) { â â â long long value; â â â â â â if (entrylen >= 32 || entrylen == 0) return 0; â â â if (string2ll((char*)entry,entrylen,&value)) { â â â /* Great, the string can be encoded. Check what's the smallest â â â * of our encoding types that can hold this value. */ â â â if (value >= 0 && value <= 12) { â â â @@ -348,15 +348,15 @@ â â â *v = value; â â â return 1; â â â } â â â return 0; â â â } â â â â â â /* Store integer 'value' at 'p', encoded as 'encoding' */ â â â -static void zipSaveInteger(unsigned char *p, int64_t value, unsigned char encoding) { â â â +void zipSaveInteger(unsigned char *p, int64_t value, unsigned char encoding) { â â â int16_t i16; â â â int32_t i32; â â â int64_t i64; â â â if (encoding == ZIP_INT_8B) { â â â ((int8_t*)p)[0] = (int8_t)value; â â â } else if (encoding == ZIP_INT_16B) { â â â i16 = value; â â â @@ -378,15 +378,15 @@ â â â /* Nothing to do, the value is stored in the encoding itself. */ â â â } else { â â â assert(NULL); â â â } â â â } â â â â â â /* Read integer encoded as 'encoding' from 'p' */ â â â -static int64_t zipLoadInteger(unsigned char *p, unsigned char encoding) { â â â +int64_t zipLoadInteger(unsigned char *p, unsigned char encoding) { â â â int16_t i16; â â â int32_t i32; â â â int64_t i64, ret = 0; â â â if (encoding == ZIP_INT_8B) { â â â ret = ((int8_t*)p)[0]; â â â } else if (encoding == ZIP_INT_16B) { â â â memcpy(&i16,p,sizeof(i16)); â â â @@ -410,15 +410,15 @@ â â â } else { â â â assert(NULL); â â â } â â â return ret; â â â } â â â â â â /* Return a struct with all information about an entry. */ â â â -static void zipEntry(unsigned char *p, zlentry *e) { â â â +void zipEntry(unsigned char *p, zlentry *e) { â â â â â â ZIP_DECODE_PREVLEN(p, e->prevrawlensize, e->prevrawlen); â â â ZIP_DECODE_LENGTH(p + e->prevrawlensize, e->encoding, e->lensize, e->len); â â â e->headersize = e->prevrawlensize + e->lensize; â â â e->p = p; â â â } â â â â â â @@ -430,15 +430,15 @@ â â â ZIPLIST_TAIL_OFFSET(zl) = intrev32ifbe(ZIPLIST_HEADER_SIZE); â â â ZIPLIST_LENGTH(zl) = 0; â â â zl[bytes-1] = ZIP_END; â â â return zl; â â â } â â â â â â /* Resize the ziplist. */ â â â -static unsigned char *ziplistResize(unsigned char *zl, unsigned int len) { â â â +unsigned char *ziplistResize(unsigned char *zl, unsigned int len) { â â â zl = zrealloc(zl,len); â â â ZIPLIST_BYTES(zl) = intrev32ifbe(len); â â â zl[len-1] = ZIP_END; â â â return zl; â â â } â â â â â â /* When an entry is inserted, we need to set the prevlen field of the next â â â @@ -457,15 +457,15 @@ â â â * because it can cause a "flapping" effect where a chain prevlen fields is â â â * first grown and then shrunk again after consecutive inserts. Rather, the â â â * field is allowed to stay larger than necessary, because a large prevlen â â â * field implies the ziplist is holding large entries anyway. â â â * â â â * The pointer "p" points to the first entry that does NOT need to be â â â * updated, i.e. consecutive fields MAY need an update. */ â â â -static unsigned char *__ziplistCascadeUpdate(unsigned char *zl, unsigned char *p) { â â â +unsigned char *__ziplistCascadeUpdate(unsigned char *zl, unsigned char *p) { â â â size_t curlen = intrev32ifbe(ZIPLIST_BYTES(zl)), rawlen, rawlensize; â â â size_t offset, noffset, extra; â â â unsigned char *np; â â â zlentry cur, next; â â â â â â while (p[0] != ZIP_END) { â â â zipEntry(p, &cur); â â â @@ -519,15 +519,15 @@ â â â break; â â â } â â â } â â â return zl; â â â } â â â â â â /* Delete "num" entries, starting at "p". Returns pointer to the ziplist. */ â â â -static unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsigned int num) { â â â +unsigned char *__ziplistDelete(unsigned char *zl, unsigned char *p, unsigned int num) { â â â unsigned int i, totlen, deleted = 0; â â â size_t offset; â â â int nextdiff = 0; â â â zlentry first, tail; â â â â â â zipEntry(p, &first); â â â for (i = 0; p[0] != ZIP_END && i < num; i++) { â â â @@ -579,15 +579,15 @@ â â â if (nextdiff != 0) â â â zl = __ziplistCascadeUpdate(zl,p); â â â } â â â return zl; â â â } â â â â â â /* Insert item at "p". */ â â â -static unsigned char *__ziplistInsert(unsigned char *zl, unsigned char *p, unsigned char *s, unsigned int slen) { â â â +unsigned char *__ziplistInsert(unsigned char *zl, unsigned char *p, unsigned char *s, unsigned int slen) { â â â size_t curlen = intrev32ifbe(ZIPLIST_BYTES(zl)), reqlen; â â â unsigned int prevlensize, prevlen = 0; â â â size_t offset; â â â int nextdiff = 0; â â â unsigned char encoding = 0; â â â long long value = 123456789; /* initialized to avoid warning. Using a value â â â that is easy to see if for some reason â â â @@ -617,28 +617,36 @@ â â â * the length of the payload. */ â â â reqlen += zipPrevEncodeLength(NULL,prevlen); â â â reqlen += zipEncodeLength(NULL,encoding,slen); â â â â â â /* When the insert position is not equal to the tail, we need to â â â * make sure that the next entry can hold this entry's length in â â â * its prevlen field. */ â â â + int forcelarge = 0; â â â nextdiff = (p[0] != ZIP_END) ? zipPrevLenByteDiff(p,reqlen) : 0; â â â + if (nextdiff == -4 && reqlen < 4) { â â â + nextdiff = 0; â â â + forcelarge = 1; â â â + } â â â â â â /* Store offset because a realloc may change the address of zl. */ â â â offset = p-zl; â â â zl = ziplistResize(zl,curlen+reqlen+nextdiff); â â â p = zl+offset; â â â â â â /* Apply memory move when necessary and update tail offset. */ â â â if (p[0] != ZIP_END) { â â â /* Subtract one because of the ZIP_END bytes */ â â â memmove(p+reqlen,p-nextdiff,curlen-offset-1+nextdiff); â â â â â â /* Encode this entry's raw length in the next entry. */ â â â - zipPrevEncodeLength(p+reqlen,reqlen); â â â + if (forcelarge) â â â + zipPrevEncodeLengthForceLarge(p+reqlen,reqlen); â â â + else â â â + zipPrevEncodeLength(p+reqlen,reqlen); â â â â â â /* Update offset for tail */ â â â ZIPLIST_TAIL_OFFSET(zl) = â â â intrev32ifbe(intrev32ifbe(ZIPLIST_TAIL_OFFSET(zl))+reqlen); â â â â â â /* When the tail contains more than one entry, we need to take â â â * "nextdiff" in account as well. Otherwise, a change in the âââ stat {} â â â â @@ -1,8 +1,8 @@ â â â â â â â â - Size: 61305 Blocks: 120 IO Block: 4096 regular file â â â â + Size: 61424 Blocks: 120 IO Block: 4096 regular file â â â â Links: 1 â â â â Access: (0644/-rw-r--r--) Uid: ( 1000/ lamby) Gid: ( 1000/ lamby) â â â â â â â â Modify: 1970-01-01 00:00:01.000000000 +0000 â â â â â â â â Birth: -