Your message dated Wed, 15 Mar 2017 22:28:09 +0000
with message-id <e1cohor-0005yj...@respighi.debian.org>
and subject line unblock redis
has caused the Debian Bug report #857746,
regarding unblock: redis/3:3.2.8-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
857746: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=857746
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
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: -

--- End Message ---
--- Begin Message ---
Unblocked.

--- End Message ---

Reply via email to