package: src:zlib
severity: wishlist
tags: patch

I've been maintaining minizip as a separate source package for the
last few years.  It has become clear that the version included in
zlib/contrib is a more definitive upstream (zlib upstream has done
updates in recent years, minizip upstream has not), so it would make
more sense to provide minizip as part of src:zlib [0].

A few years ago, you were concerned about minizip's ABI changing too
much [1].  That does not seem to have happened.  I diffed minizip 1.1
with the version in zlib/contrib.  The meaningful changes are small
and there is no ABI difference.

Anyway, here is a patch for src:zlib that adds minizip binary
packages.  Please let me know what you think.

Best wishes,
Mike

[0] http://bugs.debian.org/843617
[1] http://bugs.debian.org/574978
diff -Nru zlib-1.2.11.dfsg/debian/changelog zlib-1.2.11.dfsg/debian/changelog
--- zlib-1.2.11.dfsg/debian/changelog	2020-02-24 16:07:12.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/changelog	2020-04-07 21:50:15.000000000 -0400
@@ -1,3 +1,9 @@
+zlib (1:1.2.11.dfsg-2.1) UNRELEASED; urgency=medium
+
+  * Build minizip packages.
+
+ -- Michael Gilbert <mgilb...@debian.org>  Wed, 08 Apr 2020 01:50:15 +0000
+
 zlib (1:1.2.11.dfsg-2) unstable; urgency=low
 
   * Acknowledge previous NMUs (closes: #949388).
diff -Nru zlib-1.2.11.dfsg/debian/control zlib-1.2.11.dfsg/debian/control
--- zlib-1.2.11.dfsg/debian/control	2020-02-24 16:07:12.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/control	2020-04-07 21:50:15.000000000 -0400
@@ -4,7 +4,7 @@
 Maintainer: Mark Brown <broo...@debian.org>
 Standards-Version: 3.9.8
 Homepage: http://zlib.net/
-Build-Depends: debhelper (>= 8.1.3~), gcc-multilib [amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 sparc s390x mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64 mips64el mips64r6 mips64r6el x32] <!nobiarch>, dpkg-dev (>= 1.16.1)
+Build-Depends: debhelper (>= 8.1.3~), gcc-multilib [amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 sparc s390x mipsn32 mipsn32el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64 mips64el mips64r6 mips64r6el x32] <!nobiarch>, dpkg-dev (>= 1.16.1), autoconf
 
 Package: zlib1g
 Architecture: any
@@ -118,3 +118,50 @@
  This package should ONLY be used for building packages, users who do
  not need to build packages should use multiarch to install the relevant
  runtime.
+
+Package: minizip
+Section: utils
+Architecture: any
+Depends:
+ ${misc:Depends},
+ ${shlibs:Depends},
+Replaces:
+ zlib-bin,
+Conflicts:
+ zlib-bin,
+Description: compression library - minizip tools
+ minizip is a minimalistic library that supports compressing, extracting,
+ viewing, and manipulating zip files.
+ .
+ This package includes the minizip and miniunzip tools.
+
+Package: libminizip1
+Architecture: any
+Multi-Arch: same
+Pre-Depends:
+ ${misc:Pre-Depends}
+Depends:
+ ${misc:Depends},
+ ${shlibs:Depends},
+Description: compression library - minizip library
+ minizip is a minimalistic library that supports compressing, extracting,
+ viewing, and manipulating zip files.
+ .
+ This package includes the minizip library.
+
+Package: libminizip-dev
+Architecture: any
+Multi-Arch: same
+Section: libdevel
+Depends:
+ ${misc:Depends},
+ libminizip1 (= ${binary:Version})
+Replaces:
+ libkml-dev (<< 1.3.0~r864+git20150723-0fa2f22-1~),
+Breaks:
+ libkml-dev (<< 1.3.0~r864+git20150723-0fa2f22-1~),
+Description: compression library - minizip development files
+ minizip is a minimalistic library that supports compressing, extracting,
+ viewing, and manipulating zip files.
+ .
+ This package includes development support files for the minizip library.
diff -Nru zlib-1.2.11.dfsg/debian/libminizip-dev.install zlib-1.2.11.dfsg/debian/libminizip-dev.install
--- zlib-1.2.11.dfsg/debian/libminizip-dev.install	1969-12-31 19:00:00.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/libminizip-dev.install	2020-04-07 21:50:15.000000000 -0400
@@ -0,0 +1,4 @@
+usr/include/minizip
+usr/lib/*/libminizip.a
+usr/lib/*/libminizip.so
+usr/lib/*/pkgconfig/minizip.pc
diff -Nru zlib-1.2.11.dfsg/debian/libminizip1.install zlib-1.2.11.dfsg/debian/libminizip1.install
--- zlib-1.2.11.dfsg/debian/libminizip1.install	1969-12-31 19:00:00.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/libminizip1.install	2020-04-07 21:50:15.000000000 -0400
@@ -0,0 +1 @@
+usr/lib/*/libminizip.so.*
diff -Nru zlib-1.2.11.dfsg/debian/libminizip1.symbols zlib-1.2.11.dfsg/debian/libminizip1.symbols
--- zlib-1.2.11.dfsg/debian/libminizip1.symbols	1969-12-31 19:00:00.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/libminizip1.symbols	2020-04-07 21:50:15.000000000 -0400
@@ -0,0 +1,68 @@
+libminizip.so.1 libminizip1 #MINVER#
+ LoadCentralDirectoryRecord@Base 1.1
+ Write_EndOfCentralDirectoryRecord@Base 1.1
+ Write_GlobalComment@Base 1.1
+ Write_LocalFileHeader@Base 1.1
+ Write_Zip64EndOfCentralDirectoryLocator@Base 1.1
+ Write_Zip64EndOfCentralDirectoryRecord@Base 1.1
+ call_zopen64@Base 1.1
+ call_zseek64@Base 1.1
+ call_ztell64@Base 1.1
+ fill_fopen64_filefunc@Base 1.1
+ fill_fopen_filefunc@Base 1.1
+ fill_zlib_filefunc64_32_def_from_filefunc32@Base 1.1
+ unzClose@Base 1.1
+ unzCloseCurrentFile@Base 1.1
+ unzGetCurrentFileInfo64@Base 1.1
+ unzGetCurrentFileInfo@Base 1.1
+ unzGetCurrentFileZStreamPos64@Base 1.1
+ unzGetFilePos64@Base 1.1
+ unzGetFilePos@Base 1.1
+ unzGetGlobalComment@Base 1.1
+ unzGetGlobalInfo64@Base 1.1
+ unzGetGlobalInfo@Base 1.1
+ unzGetLocalExtrafield@Base 1.1
+ unzGetOffset64@Base 1.1
+ unzGetOffset@Base 1.1
+ unzGoToFilePos64@Base 1.1
+ unzGoToFilePos@Base 1.1
+ unzGoToFirstFile@Base 1.1
+ unzGoToNextFile@Base 1.1
+ unzLocateFile@Base 1.1
+ unzOpen2@Base 1.1
+ unzOpen2_64@Base 1.1
+ unzOpen64@Base 1.1
+ unzOpen@Base 1.1
+ unzOpenCurrentFile2@Base 1.1
+ unzOpenCurrentFile3@Base 1.1
+ unzOpenCurrentFile@Base 1.1
+ unzOpenCurrentFilePassword@Base 1.1
+ unzReadCurrentFile@Base 1.1
+ unzRepair@Base 1.1
+ unzSetOffset64@Base 1.1
+ unzSetOffset@Base 1.1
+ unzStringFileNameCompare@Base 1.1
+ unz_copyright@Base 1.1
+ unzeof@Base 1.1
+ unztell64@Base 1.1
+ unztell@Base 1.1
+ zipClose@Base 1.1
+ zipCloseFileInZip@Base 1.1
+ zipCloseFileInZipRaw64@Base 1.1
+ zipCloseFileInZipRaw@Base 1.1
+ zipOpen2@Base 1.1
+ zipOpen2_64@Base 1.1
+ zipOpen3@Base 1.1
+ zipOpen64@Base 1.1
+ zipOpen@Base 1.1
+ zipOpenNewFileInZip2@Base 1.1
+ zipOpenNewFileInZip2_64@Base 1.1
+ zipOpenNewFileInZip3@Base 1.1
+ zipOpenNewFileInZip3_64@Base 1.1
+ zipOpenNewFileInZip4@Base 1.1
+ zipOpenNewFileInZip4_64@Base 1.1
+ zipOpenNewFileInZip64@Base 1.1
+ zipOpenNewFileInZip@Base 1.1
+ zipRemoveExtraInfoBlock@Base 1.1
+ zipWriteInFileInZip@Base 1.1
+ zip_copyright@Base 1.1
diff -Nru zlib-1.2.11.dfsg/debian/minizip.install zlib-1.2.11.dfsg/debian/minizip.install
--- zlib-1.2.11.dfsg/debian/minizip.install	1969-12-31 19:00:00.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/minizip.install	2020-04-07 21:50:15.000000000 -0400
@@ -0,0 +1,2 @@
+usr/bin/minizip
+usr/bin/miniunzip
diff -Nru zlib-1.2.11.dfsg/debian/minizip.manpages zlib-1.2.11.dfsg/debian/minizip.manpages
--- zlib-1.2.11.dfsg/debian/minizip.manpages	1969-12-31 19:00:00.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/minizip.manpages	2020-04-07 21:50:15.000000000 -0400
@@ -0,0 +1,2 @@
+contrib/minizip/minizip.1
+contrib/minizip/miniunzip.1
diff -Nru zlib-1.2.11.dfsg/debian/patches/CVE-2014-9485 zlib-1.2.11.dfsg/debian/patches/CVE-2014-9485
--- zlib-1.2.11.dfsg/debian/patches/CVE-2014-9485	1969-12-31 19:00:00.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/patches/CVE-2014-9485	2020-04-07 21:50:15.000000000 -0400
@@ -0,0 +1,28 @@
+description: fix directory traversal issues in miniunzip
+author: Michael Gilbert <mgilb...@debian.org>
+bug-debian: https://bugs.debian.org/774321
+bug-debian: https://bugs.debian.org/776831
+
+--- a/contrib/minizip/miniunz.c
++++ b/contrib/minizip/miniunz.c
+@@ -367,6 +367,20 @@ int do_extract_currentfile(uf,popt_extra
+         else
+             write_filename = filename_withoutpath;
+ 
++        if (write_filename[0]!='\0')
++        {
++            const char* relative_check = write_filename;
++            while (relative_check[1]!='\0')
++            {
++                if (relative_check[0]=='.' && relative_check[1]=='.')
++                    write_filename = relative_check;
++                relative_check++;
++            }
++        }
++
++        while (write_filename[0]=='/' || write_filename[0]=='.')
++            write_filename++;
++
+         err = unzOpenCurrentFilePassword(uf,password);
+         if (err!=UNZ_OK)
+         {
diff -Nru zlib-1.2.11.dfsg/debian/patches/cflags-for-minizip zlib-1.2.11.dfsg/debian/patches/cflags-for-minizip
--- zlib-1.2.11.dfsg/debian/patches/cflags-for-minizip	2020-01-28 04:37:49.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/patches/cflags-for-minizip	1969-12-31 19:00:00.000000000 -0500
@@ -1,23 +0,0 @@
-
---- zlib-1.2.7.dfsg.orig/contrib/minizip/Makefile
-+++ zlib-1.2.7.dfsg/contrib/minizip/Makefile
-@@ -1,5 +1,5 @@
- CC=cc
--CFLAGS=-O -I../..
-+CFLAGS+=-O -I../..
- 
- UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
- ZIP_OBJS = minizip.o zip.o   ioapi.o ../../libz.a
-@@ -10,10 +10,10 @@ ZIP_OBJS = minizip.o zip.o   ioapi.o ../
- all: miniunz minizip
- 
- miniunz:  $(UNZ_OBJS)
--	$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS)
-+	$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS) $(LDFLAGS)
- 
- minizip:  $(ZIP_OBJS)
--	$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)
-+	$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS) $(LDFLAGS)
- 
- test:	miniunz minizip
- 	./minizip test readme.txt
diff -Nru zlib-1.2.11.dfsg/debian/patches/series zlib-1.2.11.dfsg/debian/patches/series
--- zlib-1.2.11.dfsg/debian/patches/series	2020-01-28 04:37:49.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/patches/series	2020-04-07 21:50:15.000000000 -0400
@@ -1,3 +1 @@
-cflags-for-minizip
-use-dso
-use-dso-really
+CVE-2014-9485
diff -Nru zlib-1.2.11.dfsg/debian/patches/use-dso-really zlib-1.2.11.dfsg/debian/patches/use-dso-really
--- zlib-1.2.11.dfsg/debian/patches/use-dso-really	2020-01-28 04:37:49.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/patches/use-dso-really	1969-12-31 19:00:00.000000000 -0500
@@ -1,29 +0,0 @@
-
-
---- zlib-1.2.7.dfsg.orig/contrib/minizip/Makefile
-+++ zlib-1.2.7.dfsg/contrib/minizip/Makefile
-@@ -1,8 +1,9 @@
- CC=cc
- CFLAGS+=-O -I../..
-+ZLIB=-L../.. -lz
- 
--UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
--ZIP_OBJS = minizip.o zip.o   ioapi.o ../../libz.a
-+UNZ_OBJS = miniunz.o unzip.o ioapi.o
-+ZIP_OBJS = minizip.o zip.o   ioapi.o
- 
- .c.o:
- 	$(CC) -c $(CFLAGS) $*.c
-@@ -10,10 +11,10 @@ ZIP_OBJS = minizip.o zip.o   ioapi.o ../
- all: miniunz minizip
- 
- miniunz:  $(UNZ_OBJS)
--	$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS) $(LDFLAGS)
-+	$(CC) $(CFLAGS) -o $@ $(UNZ_OBJS) $(ZLIB) $(LDFLAGS)
- 
- minizip:  $(ZIP_OBJS)
--	$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS) $(LDFLAGS)
-+	$(CC) $(CFLAGS) -o $@ $(ZIP_OBJS) $(ZLIB) $(LDFLAGS)
- 
- test:	miniunz minizip
- 	./minizip test readme.txt
diff -Nru zlib-1.2.11.dfsg/debian/rules zlib-1.2.11.dfsg/debian/rules
--- zlib-1.2.11.dfsg/debian/rules	2020-02-24 16:07:12.000000000 -0500
+++ zlib-1.2.11.dfsg/debian/rules	2020-04-07 21:50:15.000000000 -0400
@@ -87,6 +87,8 @@
 
 	AR=$(AR) CC="$(DEB_HOST_GNU_TYPE)-gcc" CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" uname=GNU ./configure --shared --prefix=/usr --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)
 
+	cd contrib/minizip && autoreconf -fis && CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" uname=GNU ./configure --prefix=/usr --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH)
+
 	touch $@
 
 configure64-stamp: configure
@@ -124,6 +126,9 @@
 	dh_testdir
 
 	$(MAKE)
+
+	$(MAKE) -C contrib/minizip minizip miniunzip
+
 	-$(MAKE) test
 
 	touch $@
@@ -147,6 +152,9 @@
 	dh_testdir
 	dh_testroot
 
+	if [ -f contrib/minizip/Makefile ]; then $(MAKE) -C contrib/minizip clean; fi
+	cd contrib/minizip && rm -f compile config.* configure depcomp install-sh libtool Makefile Makefile.in aclocal.m4 ltmain.sh missing minizip.pc minizip miniunzip
+
 	$(MAKE) distclean
 
 	rm -f build-stamp configure-stamp foo.gz 
@@ -166,6 +174,8 @@
 
 	$(MAKE) prefix=$(CURDIR)/debian/tmp/usr install
 
+	$(MAKE) -C contrib/minizip prefix=$(CURDIR)/debian/tmp/usr install
+
 	install -d debian/tmp/lib/$(DEB_HOST_MULTIARCH)
 	mv debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libz.so.* debian/tmp/lib/$(DEB_HOST_MULTIARCH)
 	ln -sf /lib/$(DEB_HOST_MULTIARCH)/$$(readlink debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libz.so) debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/libz.so
@@ -187,6 +197,9 @@
 binary-arch: build install $(EXTRA_INSTALL)
 	dh_testdir
 	dh_testroot
+	mkdir -p debian/tmp/usr/bin
+	cp contrib/minizip/minizip debian/tmp/usr/bin
+	cp contrib/minizip/miniunzip debian/tmp/usr/bin
 	dh_installchangelogs -a ChangeLog
 	dh_installdocs -a
 	dh_installexamples -a
@@ -197,6 +210,7 @@
 	dh_strip -a --dbgsym-migration="zlib1g-dbg (<< 1:1.2.11.dfsg-2~)"
 	dh_compress -a
 	dh_fixperms -a
+	dh_makeshlibs -plibminizip1 -V"libminizip1 (>> 1:1.2.11.dfsg-2)"
 	dh_makeshlibs -pzlib1g -V"zlib1g (>= 1:1.2.3.3.dfsg-1)" --add-udeb=zlib1g-udeb
 ifeq (,$(filter nobiarch,$(DEB_BUILD_PROFILES)))
 ifneq (,$(findstring $(DEB_HOST_ARCH), $(32-ARCHS)))

Reply via email to