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: -

Reply via email to