Compare commits

...
Sign in to create a new pull request.

61 commits

Author SHA1 Message Date
Fedora Release Engineering
4046c210d1 Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild 2026-07-17 09:41:10 +00:00
Fedora Release Engineering
249d2942a9 Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-17 21:08:47 +00:00
Fedora Release Engineering
6375da78ff Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 21:18:51 +00:00
Fedora Release Engineering
8acab478a5 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-19 16:47:24 +00:00
Jakub Martisko
965d5021a9 Manpages: --no-extra option is actually called --strip-extra 2024-12-11 11:58:26 +01:00
Fedora Release Engineering
fabe9e5d1d Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-20 10:53:10 +00:00
Software Management Team
22bf29651c Eliminate use of obsolete %patchN syntax (#2283636) 2024-05-30 12:46:50 +02:00
Fedora Release Engineering
5843ce319d Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-27 11:08:19 +00:00
Jakub Martisko
a2433a4859 Fix: buffer overflow with unicode file names
Resolves: rhbz#2165653
2023-09-18 13:04:00 +02:00
Fedora Release Engineering
2105f00991 Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-22 19:42:58 +00:00
Lukáš Zaoral
f0aa624a47
migrate to SPDX license format 2023-04-13 14:47:41 +02:00
Fedora Release Engineering
a52777446f Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-21 08:16:41 +00:00
Florian Weimer
98b40e35ca Really build with -std=gnu89 (#2143565) 2022-11-18 08:06:30 +01:00
Florian Weimer
9006220708 Build with -std=gnu89 (#2143565) 2022-11-17 09:54:36 +01:00
Fedora Release Engineering
359c42d3bf Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-23 13:56:04 +00:00
Fedora Release Engineering
aa70fe9dea - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-22 05:52:18 +00:00
Fedora Release Engineering
58c0889b70 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-23 22:18:40 +00:00
Jakub Martisko
0a4a3aefb6 Use the generic build target instead of generic_gcc 2021-03-05 13:48:55 +01:00
Jakub Martisko
eaea924793 Use build macros 2021-03-05 13:27:50 +01:00
Fedora Release Engineering
26ddc6ced9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-01-28 00:42:40 +00:00
Tom Stellard
dea2f3587c Add BuildRequires: make
https://fedoraproject.org/wiki/Changes/Remove_make_from_BuildRoot
2021-01-09 01:53:28 +00:00
Fedora Release Engineering
18b8781d25 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-07-29 15:23:50 +00:00
Fedora Release Engineering
537855f109 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-01-31 05:19:59 +00:00
Fedora Release Engineering
ef2e772ce7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-07-27 05:01:16 +00:00
Fedora Release Engineering
3aa1b995be - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2019-02-03 13:11:44 +00:00
1cac73c467 Remove obsolete Group tag
References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag
2019-01-28 20:24:57 +01:00
Fedora Release Engineering
39819218ac - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-07-14 09:50:49 +00:00
db52ce845b Merge #2 Add CI tests using the standard test interface 2018-03-14 11:08:43 +00:00
Jakub Martisko
6d2c780558 zip.spec: add gcc to buildrequires 2018-03-01 11:12:40 +01:00
Fedora Release Engineering
97885930b2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2018-02-09 22:28:39 +00:00
esakaiev@redhat.com
5bfd267546 Fixes for zip tests 2018-02-09 18:05:33 +02:00
esakaiev
aa3f4dccc7 Porting tests for zip package to dist-git 2018-02-08 18:12:48 +02:00
Fedora Release Engineering
ed96214499 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild 2017-08-03 11:11:40 +00:00
Fedora Release Engineering
328bd15235 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild 2017-07-27 22:43:33 +00:00
Fedora Release Engineering
11ae231a18 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild 2017-02-11 18:24:59 +00:00
Stephen Gallagher
ecb0fe07ad Add missing %license macro 2017-02-02 11:10:47 +01:00
Fedora Release Engineering
5566eb5c53 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild 2016-02-05 04:07:03 +00:00
Petr Stodulka
7ceacb5c75 bump release 2015-06-26 10:13:04 +02:00
Petr Stodulka
68dbbfe9a7 Added requirement for unzip (#1235956) 2015-06-26 10:12:07 +02:00
Dennis Gilmore
fa5dc1efa0 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild 2015-06-19 04:48:02 +00:00
Petr Stodulka
99fef8bcfc fix chrashing zipnote when edit .zip files (#1179420) 2015-01-28 16:33:43 +01:00
734c4f21a9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild 2014-08-18 11:41:44 +00:00
Dennis Gilmore
bc37ebb96a - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild 2014-06-07 13:11:57 -05:00
Peter Robinson
249fe1aa07 Add patch to fix format-security FTBFS (RHBZ 1037412) 2014-04-01 07:42:36 +01:00
Dennis Gilmore
fd731d80bb - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild 2013-08-04 04:54:43 -05:00
Michal Luscon
5434225b6c - missing -q option in zipsplit and zipnote man pages 2013-05-09 19:25:13 +02:00
Michal Luscon
8de2a94c4b - enable bzip-2 support
- fix bogus date in changelog section
2013-02-25 14:46:12 +01:00
Dennis Gilmore
1570398e01 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild 2013-02-14 22:21:43 -06:00
Dennis Gilmore
959d535b84 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild 2012-07-22 03:22:45 -05:00
Dennis Gilmore
37537766b7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild 2012-01-14 03:38:02 -06:00
Dennis Gilmore
a9e17d31e3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild 2011-02-08 03:04:40 -06:00
Fedora Release Engineering
923d973a6e dist-git conversion 2010-07-29 16:31:30 +00:00
Karel Klíč
ab0085207a spec file cleanup 2010-05-24 08:27:54 +00:00
Bill Nottingham
9161d85090 Fix typo that causes a failure to update the common directory. (releng
#2781)
2009-11-25 22:39:20 +00:00
Karel Klíč
43dbc9a7b4 Update to 3.0 2009-11-16 12:26:10 +00:00
Jesse Keating
c2f4be329b - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild 2009-07-27 09:03:18 +00:00
Jesse Keating
f890a254f5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild 2009-02-25 18:41:47 +00:00
Jesse Keating
463ef04b11 - Autorebuild for GCC 4.3 2008-02-20 06:41:58 +00:00
Ivana Varekova
f6c58de24f - add S_IWOTH option 2007-11-14 11:30:00 +00:00
Ivana Varekova
68b5760de6 - fix "zip does not honor umask setting when creating archives"
- fix "zip segfaults by attempt to archive big file"
- spec file cleanup
2007-11-05 13:29:27 +00:00
Bill Nottingham
d35c9b9c30 makefile update to properly grab makefile.common 2007-10-15 19:38:55 +00:00
30 changed files with 1373 additions and 717 deletions

View file

@ -1,2 +0,0 @@
zcrypt29.tar.gz
zip231.tar.gz

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
zip30.tar.gz

View file

@ -1,6 +0,0 @@
# Makefile for source rpm: zip
# $Id$
NAME := zip
SPECFILE = $(firstword $(wildcard *.spec))
include ../common/Makefile.common

12
buffer_overflow.patch Normal file
View file

@ -0,0 +1,12 @@
diff -urp zip30/fileio.c zip30/fileio.c
--- zip30/fileio.c 2008-05-29 03:13:24.000000000 +0300
+++ zip30/fileio.c 2023-05-02 12:19:50.488314853 +0300
@@ -3502,7 +3502,7 @@ zwchar *local_to_wide_string(local_strin
if ((wc_string = (wchar_t *)malloc((wsize + 1) * sizeof(wchar_t))) == NULL) {
ZIPERR(ZE_MEM, "local_to_wide_string");
}
- wsize = mbstowcs(wc_string, local_string, strlen(local_string) + 1);
+ wsize = mbstowcs(wc_string, local_string, wsize + 1);
wc_string[wsize] = (wchar_t) 0;
/* in case wchar_t is not zwchar */

View file

@ -1,19 +0,0 @@
diff -ur zip-2.3/crc_i386.S zip-2.3-lhh/crc_i386.S
--- zip-2.3/crc_i386.S 1999-10-09 16:10:26.000000000 -0400
+++ zip-2.3-lhh/crc_i386.S 2003-10-24 16:15:52.000000000 -0400
@@ -230,3 +230,6 @@
#endif /* i386 || _i386 || _I386 || __i386 */
#endif /* !USE_ZLIB */
+
+.section .note.GNU-stack, "", @progbits
+.previous
diff -ur zip-2.3/match.S zip-2.3-lhh/match.S
--- zip-2.3/match.S 1999-07-27 17:18:14.000000000 -0400
+++ zip-2.3-lhh/match.S 2003-10-24 16:15:38.000000000 -0400
@@ -405,3 +405,5 @@
#endif /* i386 || _I386 || _i386 || __i386 */
#endif /* !USE_ZLIB */
+.section .note.GNU-stack, "", @progbits
+.previous

40
man.patch Normal file
View file

@ -0,0 +1,40 @@
--- ./man/zipsplit.1 2008-05-08 10:17:48.000000000 +0200
+++ ./man/zipsplit.1 2013-04-26 18:33:12.492008280 +0200
@@ -12,6 +12,7 @@
.RB [ \-r\ room ]
.RB [ \-b\ path ]
.RB [ \-h ]
+.RB [ \-q ]
.RB [ \-v ]
.RB [ \-L ]
zipfile
@@ -47,6 +48,9 @@
.BI \-h
Show a short help.
.TP
+.BI \-q
+Suppress some informational messages.
+.TP
.BI \-v
Show version information.
.TP
--- ./man/zipnote.1 2013-04-26 18:40:32.145018756 +0200
+++ ./man/zipnote.1 2013-04-26 18:40:18.943018442 +0200
@@ -7,6 +7,7 @@
.RB [ \-w ]
.RB [ \-b\ path ]
.RB [ \-h ]
+.RB [ \-q ]
.RB [ \-v ]
.RB [ \-L ]
zipfile
@@ -27,6 +28,9 @@
.BI \-h
Show a short help.
.TP
+.BI \-q
+Suppress some informational messages.
+.TP
.BI \-v
Show version information.
.TP

View file

@ -1,2 +1 @@
922f7f38f8e50ec353fd5b3102e4d4d6 zcrypt29.tar.gz
6bfc076664416251d7624ab3538d1cb9 zip231.tar.gz
7b74551e63f8ee6aab6fbc86676c0d37 zip30.tar.gz

47
tests/tests.yml Normal file
View file

@ -0,0 +1,47 @@
---
- hosts: localhost
tags:
- classic
tasks:
- name: Define remote_artifacts if it is not already defined
set_fact:
artifacts: ${HOME}/artifacts
when: artifacts is not defined
- name: Make artifacts directory
file: path={{ artifacts }} state=directory recurse=yes
- block:
- name: Execute tests
shell: |
logfile={{ artifacts }}/test.{{ item }}.log
exec 2>>$logfile 1>>$logfile
cd tests
#make script executable
chmod 0775 {{ item }}
#execute the test
python2 {{ item }}.py
if [ $? -eq 0 ]; then
echo "PASS {{ item }}" >> {{ artifacts }}/test.log
else
echo "FAIL {{ item }}" >> {{ artifacts }}/test.log
fi
with_items:
- "test_4GBsegfault"
- "test_big_file_in_archive"
- "test_long_path_in_archive"
- "test_many_files_in_archive"
- "test_umask"
- "test_umask_when_creating"
- "test_zipnote_fails_to_update_the_archive"
# Can't go in block. See
# https://github.com/ansible/ansible/issues/20736
- name: Check the results
shell: grep "^FAIL" {{ artifacts }}/test.log
register: test_fails
failed_when: test_fails.stdout or test_fails.stderr

154
tests/tests/__init__.py Executable file
View file

@ -0,0 +1,154 @@
'''
author = esakaiev@redhat.com
'''
import logging
import sys
import subprocess
import os
import shutil
def decorated_message(message):
"""
This decorator is used for providing logging header for different sections in the scripts
:param message: (`STRING`)
:return: decorated_function
"""
def decorated_function(func):
"""
:param func:
:return:
"""
def wrapper(self):
"""
:param self:
:return:
"""
print " "
print ("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
print (":: {0}".format(message))
print ("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
func(self)
return wrapper
return decorated_function
class BaseZipTests(object):
"""
This is a Base class for zip tests
"""
def __init__(self):
self._set_logger()
self._purpose = ""
self.print_test_purpose()
def _set_logger(self):
"""
This method is used for instantiating of logger
:return:
- None
"""
self.logger = logging.getLogger()
self.logger.setLevel(logging.DEBUG)
self.handler = logging.StreamHandler(sys.stdout)
self.handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('[ %(asctime)s ] :: [ %(message)s ]')
self.handler.setFormatter(formatter)
self.logger.addHandler(self.handler)
@decorated_message("PURPOSE")
def print_test_purpose(self):
"""
:return:
"""
print self._purpose
def run_cmd(self, cmd, exp_err_code, message, cwd=None):
"""
This method is used for executing cmd, check output error code and
add result in the logger
:param cmd: ('STRING') - some command to execute
:param exp_err_code: ('INTEGER') - expected error code
:param message: ('STRING') - command description
:param cwd: ('STRING') - path to directory, where need to execute cmd
:return:
- errcode ('INTEGER')
"""
try:
errcode = subprocess.call(cmd, shell=True, cwd=cwd, stdout=sys.stderr.fileno())
if errcode != exp_err_code:
self.logger.debug("FAIL :: {0}".format(message))
else:
self.logger.debug("PASS ] :: [ {0}".format(message))
return errcode
except subprocess.CalledProcessError as exp:
self.logger.error("Could not execute command {0}, e: {1}".format(cmd, exp))
def check_package(self):
"""
This method is used for checking, if zip package is installed
:return: None
"""
assert self.run_cmd("dnf list installed zip", 0, "Dnf package should be installed") == 0
def check_output(self, cmd, exp_output, message, cwd=None):
"""
This method is used for executing cmd and compare output result with expected message
:param cmd: (`STRING`) - some command to execute
:param exp_err_code: (`INTEGER`) - expected error code
:param message: (`STRING`) - command description
:param cwd: (`STRING`) - path to directory, where need to execute cmd
:return:
- output message (`STRING`)
"""
try:
output = self.execute_cmd(cmd, cwd)
if output != exp_output:
self.logger.debug("FAIL ]:: [ {}".format(message))
else:
self.logger.debug("PASS ] :: [ {}".format(message))
return output
except subprocess.CalledProcessError as exp:
self.logger.error(r'FAIL ] :: [ Could not execute command: "{0}",\
ex: {1}'.format(cmd, exp))
def execute_cmd(self, cmd, cwd=None):
"""
This method is used for executing cmd and return output message
:param cmd: (`STRING`) - some command to execute
:param cwd: (`STRING`) - path to directory, where need to execute cmd
:return:
- output message (`STRING`)
"""
try:
output = subprocess.check_output(cmd, shell=True, cwd=cwd)
return output
except subprocess.CalledProcessError as exp:
self.logger.error(r'FAIL ] :: [ Could not execute command: "{0}",\
ex: {1}'.format(cmd, exp))
def remove_file(self, file_path, is_directory=False):
"""
This method is used for removing files or directories after execution of test cases
:param file_path:(`STRING`) - path to file/folder
:param is_directory: (`BOOLEAN`) - True for directories
:return: None
"""
try:
if is_directory:
shutil.rmtree(file_path)
else:
os.remove(file_path)
self.logger.debug("File {0} has been successfully removed".format(file_path))
except OSError, exp:
self.logger.debug("File {0} doesn't exists, e: {1}".format(file_path, exp))

89
tests/tests/test_4GBsegfault.py Executable file
View file

@ -0,0 +1,89 @@
# Copyright (c) 2018 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Author: Eduard Sakaiev <esakaiev@redhat.com>
import sys
import uuid
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''zip mustn't segfault when packing files larger than 4 GB.
Note: this test can't run on RHEL 2.1 since the utilities used here
in the test don't work there as expected. This test can't run on
RHEL 5 either, but in this case, the reason is reworked zip which
can't work with files larger than 4 GB at all.'''
class Test4GBsegfault(BaseZipTests):
"""
This class is used for providing functionality
for Test4GBsegfault test case
"""
def __init__(self):
"""
"""
self._purpose = PURPOSE
super(Test4GBsegfault, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
@decorated_message("SETUP")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0,
"Creating tmp directory {}".format(self._tmpdir))
@decorated_message("TEST")
def start_test(self):
"""
:return:
"""
self.run_cmd("dd if=/dev/zero of=testfile bs=1M count=4097", 0,
"Creating of 4Gb file", self._tmpdir + "/")
self.run_cmd("zip testfile.zip testfile", 0,
"Archiving file with zip", self._tmpdir + "/")
@decorated_message("CLEANUP")
def cleanup(self):
"""
:return:
"""
self.run_cmd("rm -r {}".format(self._tmpdir), 0,
"Removing tmp directory")
if __name__ == "__main__":
test_4gb = Test4GBsegfault()
try:
test_4gb.prepare_setup()
test_4gb.start_test()
except AssertionError, exp:
test_4gb.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test_4gb.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test_4gb.cleanup()

View file

@ -0,0 +1,128 @@
# python2 test_big_file_in_archive.py
# Author: Josef Zila <jzila@redhat.com>
# Location: CoreOS/zip/Functionality/stress-tests/big-file-in-archive/runtest.sh
# Description: zip - tests handling large files (2GB,3MB,4GB)
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Include rhts and rhtslib environment
# rpm -q --quiet rhtslib || rpm -Uvh http://nest.test.redhat.com/mnt/qa/scratch/pmuller/rhtslib/rhtslib.rpm
import sys
import uuid
import platform
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
Test Name: Big file in archive
Author: Josef Zila <jzila@redhat.com>
Location: CoreOS/zip/Functionality/stress-tests/big-file-in-archive/PURPOSE
Short Description:
Tests handling large files (2GB,3GB,4GB)
Long Description:
Test creates three files (2GB, 3GB and 4GB large) and attempts to archive each of them using zip. Then original files are deleted
and archives are unpacked, to check size of unpacked files. Current version of zip on all archs and distros in time of
writing(2.31-1) passes test. Note: 4GB file is too large for zip to handle, so it is not supposed to be successfully archived
or unpacked, test just checks for correct return codes.
how to run it:
python2 test_big_file_in_archive.py
TEST UPDATED (esakaiev)
------------------------
After rebase to zip-3.0-1 there is no 4GB limit. Patching the test accordingly.
'''
class TestBigFileInArchive(BaseZipTests):
"""
This class is used for providing functionality
for TestBigFileInArchive test case
"""
def __init__(self):
"""
"""
self._purpose = PURPOSE
super(TestBigFileInArchive, self).__init__()
self._files = ['/tmp/tmp.{}'.format(uuid.uuid4()) for x in xrange(3)]
self._files_sizes = [2048, 3056, 4096]
self._os_distribution = platform.linux_distribution()
@decorated_message("Preparing Setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
for i, file_name in enumerate(self._files):
size = self._files_sizes[i]
assert self.run_cmd("dd if=/dev/zero of={0} bs=1M count={1}".format(file_name, size), 0,
"Creating {0} GB file".format(size / 1000), cwd="/tmp/") == 0
@decorated_message("Starting Test")
def start_test(self):
"""
:return:
"""
for i, file_name in enumerate(self._files):
error_code = 0
self.remove_file(file_name + ".zip") # #remove archive temp files, we just need unused temp names
size = self._files_sizes[i]
self.run_cmd("zip {0} {1}".format(file_name + ".zip", file_name), error_code,
"Archiving {} Gb file".format(size / 1000), cwd="/tmp/")
self.remove_file(file_name) # Removing original files
self.run_cmd("unzip {0} -d /".format(file_name + ".zip"), error_code,
"Unpacking {} Gb file".format(size / 1000), cwd="/tmp/")
# Checking new 2GB file size
self.check_output("stat -c %s {0}".format(self._files[0]), "2147483648\n", "Checking new 2GB file size")
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
for file_name in self._files:
self.remove_file(file_name)
self.remove_file(file_name + ".zip")
if __name__ == "__main__":
test = TestBigFileInArchive()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -0,0 +1,140 @@
# Author: Josef Zila <jzila@redhat.com>
# Location: CoreOS/zip/Functionality/stress-tests/long-path-in-archive/runtest.sh
# Description: zip - tests handling very long paths within archive (15*256 characters long path)
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import sys
import uuid
import os
from shutil import copyfile
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
Test Name:
Author: Josef Zila <jzila@redhat.com>
Location: CoreOS/zip/Functionality/stress-tests/long-path-in-archive/PURPOSE
Short Description:
Tests handling very long paths within archive (15*256 characters long path)
Long Description:
This test creates file with very long path of 15 directories, each 255 characters. This whole directory structure is then zipped and unzipped
to determine if zip program handles paths this long correctly. Current version of zip on all archs and distros in time of writing(2.31-1) passes test.
how to run it:
choose arch and distro
TEST UPDATED (esakaiev)
'''
class TestLongPathInArchive(BaseZipTests):
"""
This class is used for providing functionality
for TestLongPathInArchive test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestLongPathInArchive, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
self._file_under_test = "/proc/version"
self._long_name = "".join(["aaaaa" for i in xrange(51)])
self._long_path = "/".join([self._long_name for x in xrange(15)])
self._test_file_path = self._tmpdir + "/" + self._long_path + "/" + "testfile"
self._package_ver = ""
self._package_release = ""
@decorated_message("Prepare setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0, "Creating tmp directory {}".format(self._tmpdir))
self._package_ver = self.execute_cmd("rpm -q zip --queryformat %{version}")
self._package_release = self.execute_cmd("rpm -q zip --queryformat %{version}")
self.logger.debug("Running zip.{0}.{1} package".format(self._package_ver, self._package_release))
# creating folders structure:
try:
os.makedirs(self._tmpdir + "/" + self._long_path)
self.logger.debug("PASS ] :: [ Test directory with long path has been successfully created")
except OSError, exp:
self.logger.debug("FAIL ] :: [ Could not create directories by path, e: {}".format(exp))
raise
copyfile(self._file_under_test, self._test_file_path)
@decorated_message("Starting Test cases")
def start_test(self):
"""
:return:
"""
self.run_cmd("zip -r test {0} -q".format(self._long_name), 0,
"Zipping test file",
cwd=self._tmpdir)
self.remove_file(self._tmpdir + "/" + self._long_name, True)
self.run_cmd("unzip -qq test.zip", 0,
"Unzipping test file",
cwd=self._tmpdir)
content_init = None
with open(self._file_under_test) as fp_init:
content_init = fp_init.read().replace('\n', '')
content_fut = None
with open(self._test_file_path) as fp_fut:
content_fut = fp_fut.read().replace('\n', '')
if content_init == content_fut:
self.logger.debug("PASS ] :: [ {}".format("Content of the initial file and file under test was matched"))
else:
self.logger.debug("FAIL ] :: [ {}".format("Content of the initial file and file under test wasn't matched"))
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
self.remove_file(self._tmpdir, True)
if __name__ == "__main__":
test = TestLongPathInArchive()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -0,0 +1,140 @@
# Author: Josef Zila <jzila@redhat.com>
# Location: CoreOS/zip/Functionality/stress-tests/many-files-in-archive/runtest.sh
# Description: zip - Tests behaviour with many files in archive (1048578 files)
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import sys
import uuid
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
Test Name:
Author: Josef Zila <jzila@redhat.com>
Location: CoreOS/zip/Functionality/stress-tests/many-files-in-archive/PURPOSE
Short Description:
Tests behaviour with many files in archive (1048577 files)
Long Description:
This test creates 1048576 empty files and one non-empty file. Then zips and unzips directory containing all those files and tests content of
non-empty file and count of unzipped files. This test is very time-consuming. Current version of zip on all archs and distros in time of writing
(2.31-1) passes test.
how to run it:
choose arch and distro
TEST UPDATED (esakaiev)
'''
class TestManyFilesInArchive(BaseZipTests):
"""
This class is used for providing functionality
for TestManyFilesInArchive test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestManyFilesInArchive, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
self._files_number = 1048576
self._package_ver = ""
self._package_release = ""
@decorated_message("Prepare setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0,
"Creating tmp directory {}".format(self._tmpdir))
self._package_ver = self.execute_cmd("rpm -q zip --queryformat %{version}")
self._package_release = self.execute_cmd("rpm -q zip --queryformat %{version}")
self.logger.debug("Running zip.{0}.{1} package".format(self._package_ver, self._package_release))
self.logger.debug("Creating {0} files".format(self._files_number))
[open("{0}/{1}".format(self._tmpdir, i), "w").close() for i in xrange(self._files_number)]
self.logger.debug("Creating test file")
with open("{0}/test.txt".format(self._tmpdir), "w") as fp:
fp.write("12345")
@decorated_message("Starting Test cases")
def start_test(self):
"""
:return:
"""
self.run_cmd("zip -r test {0} -q".format(self._tmpdir.split('/')[-1]), 0,
"Zipping test files",
cwd='/tmp')
self.remove_file(self._tmpdir, True)
self.run_cmd("unzip -qq test.zip", 0,
"Unzipping test files",
cwd='/tmp')
test_file_content = None
with open("{0}/test.txt".format(self._tmpdir)) as fp:
test_file_content = fp.read().replace('/n', '')
if test_file_content == "12345":
self.logger.debug("PASS ] :: [ {}".format("Unpacked content matches original"))
else:
self.logger.debug("FAIL ] :: [ {}".format("Unpacked content does not match original!"))
files_count = self.execute_cmd("ls {0} | wc -l".format(self._tmpdir)).replace("\n", "")
if files_count == str(self._files_number + 1):
self.logger.debug(
"PASS ] :: [ {}".format("All {0} files present after unpacking".format(self._files_number + 1)))
else:
self.logger.debug(r"FAIL ] :: [ File count changed after unpacking! \
Before zipping there was {0} files. \
After unzip there is {1} files.".format(self._files_number + 1, files_count))
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
self.remove_file(self._tmpdir, True)
self.remove_file("/tmp/test.zip")
if __name__ == "__main__":
test = TestManyFilesInArchive()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

106
tests/tests/test_umask.py Executable file
View file

@ -0,0 +1,106 @@
# Copyright (c) 2006 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Author: Radek Biba <rbiba@redhat.com>
import sys
import uuid
UMASK = "Running umask"
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
zip is supposed to honor umask settings when creating archives.
This test case just checks if it really does
TEST UPDATED (esakaiev)
'''
class TestUmask(BaseZipTests):
"""
This class is used for providing functionality
for TestUmask test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestUmask, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
self._mask_list = ["0", "2", "20", "22", "200", "202", "220", "222", "6", "60"]
self._package_ver = ""
self._package_release = ""
@decorated_message("Prepare setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0, "Creating tmp directory {}".format(self._tmpdir))
self._package_ver = self.execute_cmd("rpm -q zip --queryformat %{version}")
self._package_release = self.execute_cmd("rpm -q zip --queryformat %{version}")
self.logger.debug("Running zip.{0}.{1} package".format(self._package_ver, self._package_release))
# Trying to verify that zip honors umask. Trying with various combinations
# of 'w's and 'r's for User, Group, and Others.
@decorated_message("Starting Test cases")
def start_test(self):
"""
:return:
"""
for mask in self._mask_list:
self.logger.debug("Running umask and zipping file {0}".format(mask))
self.execute_cmd("umask {0}; touch {0}; zip -q {0}.zip {0}".format(mask), cwd=self._tmpdir)
stat_test_zip = self.execute_cmd("stat -c %a {0}.zip".format(mask), cwd=self._tmpdir).replace("\n", "")
stat_test = self.execute_cmd("stat -c %a {0}".format(mask), cwd=self._tmpdir).replace("\n", "")
print stat_test_zip, stat_test
if stat_test_zip == stat_test:
self.logger.debug(
"PASS ] :: [ permissions for {0}.zip match to {0}, {1} == {2}".format(mask, stat_test_zip,
stat_test))
else:
self.logger.debug(
"FAIL ] :: [ permissions for {0}.zip doesn't match to {0}, {1} != {2}".format(mask, stat_test_zip,
stat_test))
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
self.remove_file(self._tmpdir, True)
if __name__ == "__main__":
test = TestUmask()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -0,0 +1,105 @@
# Author: Josef Zila <jzila@redhat.com>
# Description: Zip did not honor umask setting when creating archives.
# Copyright (c) 2008 Red Hat, Inc. All rights reserved. This copyrighted material
# is made available to anyone wishing to use, modify, copy, or
# redistribute it subject to the terms and conditions of the GNU General
# Public License v.2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import sys
import uuid
UMASK = "Running umask"
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
Test Name: umask-when-creating
Author: Josef Zila <jzila@redhat.com>
Short Description:
zip does not honor umaks setting when creating archive
Long Description:
zip appears to have a built-in umask of 0022 regardless of the global umask.
With umask set to 0000, zip-2.3-27 creates zip files with permissions of
0644 instead of 0666. Previous versions created files with correct permissions.
TEST UPDATED (esakaiev)
'''
class TestUmaskWhenCreating(BaseZipTests):
"""
This class is used for providing functionality
for TestUmaskWhenCreating test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestUmaskWhenCreating, self).__init__()
self._tmpdir = "/tmp/{}".format(uuid.uuid4())
self._mask_list = ["777", "000", "027"]
self._expected_results = ["----------", "-rw-rw-rw-", "-rw-r-----"]
self._package_ver = ""
self._package_release = ""
@decorated_message("Prepare setup")
def prepare_setup(self):
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0, "Creating tmp directory {}".format(self._tmpdir))
self._package_ver = self.execute_cmd("rpm -q zip --queryformat %{version}")
self._package_release = self.execute_cmd("rpm -q zip --queryformat %{version}")
self.logger.debug("Running zip.{0}.{1} package".format(self._package_ver, self._package_release))
@decorated_message("Starting Test cases")
def start_test(self):
for i, mask in enumerate(self._mask_list):
self.logger.debug("Running umask and zipping file {0}".format(mask))
self.execute_cmd("umask -S {0} >> /dev/null; zip test /etc/services >> /dev/null".format(mask),
cwd=self._tmpdir)
result = self.execute_cmd("ls -l test.zip | cut -b 1-10", cwd=self._tmpdir).replace("\n", "")
if result == self._expected_results[i]:
self.logger.debug(
"PASS ] :: [ file permissions match to {0}".format(self._expected_results[i]))
else:
self.logger.debug(
"FAIL ] :: [ file permissions don't match to {0}".format(self._expected_results[i]))
self.remove_file(self._tmpdir + "/" + "test.zip")
@decorated_message("Cleaning up")
def cleanup(self):
self.remove_file(self._tmpdir, True)
if __name__ == "__main__":
test = TestUmaskWhenCreating()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -0,0 +1,105 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Description: zipnote fails to update the archive
# Author: Karel Volny <kvolny@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2015 Red Hat, Inc.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import sys
import uuid
sys.path.append("..")
from tests import BaseZipTests
from tests import decorated_message
PURPOSE = '''
PURPOSE of zipnote-fails-to-update-the-archive
Description: zipnote fails to update the archive
Author: Karel Volny <kvolny@redhat.com>
TEST UPDATED (esakaiev)
'''
class TestZipnoteFailsToUpdateTheArchive(BaseZipTests):
"""
This class is used for providing functionality
for TestZipnoteFailsToUpdateTheArchive test case
"""
def __init__(self):
self._purpose = PURPOSE
super(TestZipnoteFailsToUpdateTheArchive, self).__init__()
self._tmpdir = '/tmp/tmp.{}'.format(uuid.uuid4())
@decorated_message("Preparing setup")
def prepare_setup(self):
"""
:return:
"""
self.check_package()
self.run_cmd("mkdir {}".format(self._tmpdir), 0, "Creating tmp directory {}".format(self._tmpdir))
@decorated_message("Starting Test")
def start_test(self):
"""
:return:
"""
self.run_cmd("touch file", 0, "Creating the Demo file", cwd=self._tmpdir)
self.run_cmd("zip archive.zip file", 0, "Creating the archive including the file", cwd=self._tmpdir)
self.run_cmd("zipnote archive.zip > info.txt", 0, "Reading the archive comments", cwd=self._tmpdir)
## bad - e.g. zip-3.0-1.el6.i686:
# zipnote error: Interrupted (aborting)
# Segmentation fault
## good: no output
self.run_cmd("zipnote -w archive.zip < info.txt > output_file.txt 2>&1", 0, "Writing comments to the archive",
cwd=self._tmpdir)
if 'error' in open(self._tmpdir + '/output_file.txt').read():
self.logger.debug("FAIL ] :: [ File shouldn't contain an error pattern")
else:
self.logger.debug("PASS ] :: [ File doesn't contain an error pattern")
@decorated_message("Cleaning up")
def cleanup(self):
"""
:return:
"""
self.run_cmd("rm -r {}".format(self._tmpdir), 0,
"Removing tmp directory")
if __name__ == "__main__":
test = TestZipnoteFailsToUpdateTheArchive()
try:
test.prepare_setup()
test.start_test()
except AssertionError, exp:
test.logger.debug("FAIL ] :: [ Assertion occurred {0}".format(exp))
except Exception, exp:
test.logger.debug("FAIL ] :: [ Exception occurred {0}".format(exp))
finally:
test.cleanup()

View file

@ -1,11 +0,0 @@
--- zip-2.3/util.c.pom 1999-11-07 11:29:38.000000000 +0100
+++ zip-2.3/util.c 2005-01-17 13:46:26.165396792 +0100
@@ -190,6 +190,8 @@
/* Compare the sh pattern p with the string s and return true if they match,
false if they don't or if there is a syntax error in the pattern. */
{
+ while (s[0] == '.' && s[1] == '/')
+ s += 2; /* strip redundant leading "./" sections */
return recmatch((ZCONST uch *) p, (ZCONST uch *) s, cs) == 1;
}

View file

@ -1,213 +0,0 @@
--- zip-2.31/unix/configure.lhh 2005-11-10 13:25:26.000000000 +0100
+++ zip-2.31/unix/configure 2005-11-10 13:40:44.311641648 +0100
@@ -76,14 +76,20 @@
done
fi
-echo Check for prototypes
+echo -n Check for prototypes...
echo "int main(int argc, char *argv[]) { return 0; }" > conftest.c
$CC $CFLAGS -c conftest.c > /dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_PROTO"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_PROTO"
+else
+ echo yes
+fi
+
# const check currently handles mips cc and non ANSI compilers.
# does it need more ?
-echo Check the handling of const
+echo -n Check the handling of const...
cat > conftest.c << _EOF_
typedef int charset[2];
int main()
@@ -94,9 +100,15 @@
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_CONST"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_CONST"
+else
+ echo yes
+fi
+
-echo Check for time_t
+echo -n Check for time_t...
cat > conftest.c << _EOF_
#include <sys/types.h>
#include <time.h>
@@ -107,9 +119,15 @@
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_TIME_T"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_TIME_T"
+else
+ echo yes
+fi
+
-echo Check for size_t
+echo -n Check for size_t...
cat > conftest.c << _EOF_
#include <sys/types.h>
int main()
@@ -119,7 +137,13 @@
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_SIZE_T"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_SIZE_T"
+else
+ echo yes
+fi
+
echo Check for gcc no-builtin flag
# -fno-builtin since version 2
@@ -140,18 +164,29 @@
# add NO_'function_name' to flags if missing
for func in rmdir strchr strrchr rename mktemp mktime mkstemp
do
- echo Check for $func
- echo "int main(){ $func(); return 0; }" > conftest.c
+ echo -n Check for $func...
+ echo "char $func(void); int main(){ $func(); return 0; }" > conftest.c
$CC $BFLAG -o conftest conftest.c >/dev/null 2>/dev/null
- [ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+ if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_`echo $func | tr '[a-z]' '[A-Z]'`"
+ else
+ echo yes
+ fi
done
-echo Check for memset
+echo -n Check for memset...
echo "int main(){ char k; memset(&k,0,0); return 0; }" > conftest.c
$CC -o conftest conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DZMEM"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DZMEM"
+else
+ echo yes
+fi
+
-echo Check for errno declaration
+echo -n Check for errno declaration...
cat > conftest.c << _EOF_
#include <errno.h>
main()
@@ -161,9 +196,14 @@
}
_EOF_
$CC $CFLAGS -c conftest.c >/dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_ERRNO"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_ERRNO"
+else
+ echo yes
+fi
-echo Check for directory libraries
+echo -n Check for directory libraries...
cat > conftest.c << _EOF_
int main() { return closedir(opendir(".")); }
_EOF_
@@ -178,21 +218,30 @@
done
if [ ${OPT} ]; then
LFLAGS2="${LFLAGS2} ${OPT}"
+ echo yes, ${OPT}
else
CFLAGS="${CFLAGS} -DNO_DIR"
+ echo no
fi
fi
# Dynix/ptx 1.3 needed this
-echo Check for readlink
+echo -n Check for readlink...
echo "int main(){ return readlink(); }" > conftest.c
$CC -o conftest conftest.c >/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
$CC -o conftest conftest.c -lseq >/dev/null 2>/dev/null
- [ $? -eq 0 ] && LFLAGS2="${LFLAGS2} -lseq"
+ if [ $? -eq 0 ]; then
+ LFLAGS2="${LFLAGS2} -lseq"
+ echo yes, -lseq
+ else
+ echo no
+ fi
+else
+ echo yes
fi
-echo Check for directory include file
+echo -n Check for directory include file...
OPT=""
for inc in dirent.h sys/ndir.h ndir.h sys/dir.h
do
@@ -200,17 +249,19 @@
$CPP conftest.c > /dev/null 2>/dev/null
[ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
done
+echo "${OPT}"
CFLAGS="${CFLAGS} ${OPT}"
-echo Check for non existent include files
+echo -n Check for non existent include files...
for inc in stdlib.h stddef.h unistd.h fcntl.h string.h
do
echo "#include <$inc>" > conftest.c
$CPP conftest.c >/dev/null 2>/dev/null
[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_`echo $inc | tr '[a-z]./' '[A-Z]__'`"
done
+echo ok
-echo Check for terminal I/O include file
+echo -n Check for terminal I/O include file...
OPT=""
for inc in termios.h termio.h sgtty.h
do
@@ -219,9 +270,10 @@
[ $? -eq 0 ] && OPT="-DHAVE_`echo $inc | tr '[a-z]./' '[A-Z]__'`" && break
done
CFLAGS="${CFLAGS} ${OPT}"
+echo $OPT
# needed for AIX (and others ?) when mmap is used
-echo Check for valloc
+echo -n Check for valloc...
cat > conftest.c << _EOF_
main()
{
@@ -231,7 +283,13 @@
}
_EOF_
$CC ${CFLAGS} conftest.c > /dev/null 2>/dev/null
-[ $? -ne 0 ] && CFLAGS="${CFLAGS} -DNO_VALLOC"
+if [ $? -ne 0 ]; then
+ echo no
+ CFLAGS="${CFLAGS} -DNO_VALLOC"
+else
+ echo yes
+fi
+
echo Check for 64bit fseek
for func in fseeko fseek64

View file

@ -1,11 +0,0 @@
--- zip-2.31/unix/Makefile.install 2005-02-28 08:33:50.000000000 +0100
+++ zip-2.31/unix/Makefile 2005-11-10 12:58:33.221425848 +0100
@@ -129,7 +129,7 @@
$(INSTALL_PROGRAM) $(ZIPS) $(BINDIR)
-cd $(BINDIR); $(CHMOD) $(BINFLAGS) $(ZIPS)
-$(INSTALL_D) $(MANDIR)
- $(INSTALL) man/zip.1 $(MANDIR)/zip.$(manext)
+ $(INSTALL_PROGRAM) man/zip.1 $(MANDIR)/zip.$(manext)
$(CHMOD) $(MANFLAGS) $(MANDIR)/zip.$(manext)
uninstall:

View file

@ -1,293 +0,0 @@
--- zip-2.31/unix/zipup.h.4GB 2005-01-29 07:47:58.000000000 +0100
+++ zip-2.31/unix/zipup.h 2005-11-10 13:18:02.990593904 +0100
@@ -6,13 +6,19 @@
If, for some reason, both of these files are missing, the Info-ZIP license
also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
*/
+#include <features.h>
+#include <fcntl.h>
#ifndef O_RDONLY
# define O_RDONLY 0
#endif
#ifndef O_BINARY
# define O_BINARY 0
#endif
-#define fhow (O_RDONLY|O_BINARY)
+#ifdef _LARGEFILE64_SOURCE
+#define fhow (O_RDONLY | O_LARGEFILE)
+#else
+#define fhow O_RDONLY
+#endif
#define fbad (-1)
typedef int ftype;
#define zopen(n,p) open(n,p)
--- zip-2.31/unix/unix.c.4GB 2005-02-11 03:35:02.000000000 +0100
+++ zip-2.31/unix/unix.c 2005-11-10 13:24:19.573344624 +0100
@@ -113,7 +113,11 @@
char *e; /* pointer to name from readd() */
int m; /* matched flag */
char *p; /* path for recursion */
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 s; /* result of stat() */
+#else
struct stat s; /* result of stat() */
+#endif
struct zlist far *z; /* steps through zfiles list */
if (strcmp(n, "-") == 0) /* if compressing stdin */
@@ -202,6 +206,15 @@
} /* (s.st_mode & S_IFDIR) */
else
zipwarn("ignoring special file: ", n);
+
+ /* Zip uses negative error codes (IIRC, to -3). Make sure file size
+ doesn't collide with error values. 2^32 - 8193 should be plenty until
+ info-zip supports zip64. */
+ if (s.st_size > MAX_ZIP_SIZE) {
+ zipwarn("file too large: ", a);
+ return ZE_MISS;
+ }
+
return ZE_OK;
}
@@ -321,7 +334,12 @@
If f is "-", use standard input as the file. If f is a device, return
a file size of -1 */
{
- struct stat s; /* results of stat() */
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 s; /* results of stat() */
+#else
+ struct stat s;
+#endif
+
/* converted to pointer from using FNMAX - 11/8/04 EG */
char *name;
int len = strlen(f);
@@ -343,7 +361,11 @@
name[len - 1] = '\0';
/* not all systems allow stat'ing a file with / appended */
if (strcmp(f, "-") == 0) {
+#ifdef _LARGEFILE64_SOURCE
+ if (fstat64(fileno(stdin), &s) != 0) {
+#else
if (fstat(fileno(stdin), &s) != 0) {
+#endif
free(name);
error("fstat(stdin)");
}
@@ -422,7 +444,11 @@
/* store full data in local header but just modification time stamp info
in central header */
{
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 s;
+#else
struct stat s;
+#endif
char *name;
int len = strlen(z->name);
--- zip-2.31/unix/configure.4GB 2004-12-05 09:51:18.000000000 +0100
+++ zip-2.31/unix/configure 2005-11-10 13:12:47.010630160 +0100
@@ -12,7 +12,7 @@
trap "rm -f conftest* core a.out; exit 1" 1 2 3 15
CC=${1-cc}
-CFLAGS=${2-"-O2 -I. -DUNIX"}
+CFLAGS=${2-"-O2 -I. -DUNIX -g -D_LARGEFILE64_SOURCE"}
LFLAGS1=""
LN="ln -s"
--- zip-2.31/fileio.c.4GB 2005-11-10 12:59:43.000000000 +0100
+++ zip-2.31/fileio.c 2005-11-10 13:07:13.190378552 +0100
@@ -599,7 +599,11 @@
this will be done by setfileattr() later.
*/
{
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 t; /* results of stat64() */
+#else
struct stat t; /* results of stat() */
+#endif
#if defined(CMS_MVS)
/* cmsmvs.h defines FOPW_TEMP as memory(hiperspace). Since memory is
* lost at end of run, always do copy instead of rename.
@@ -698,8 +702,11 @@
return _dos_files(&buf, f, 0xff) < 0 ? 0x20 : buf.atr;
#else
+#ifdef _LARGEFILE64_SOURCE
+ struct stat64 s;
+#else
struct stat s;
-
+#endif
return SSTAT(f, &s) == 0 ? (int) s.st_mode : 0;
#endif
}
@@ -920,3 +927,108 @@
}
#endif /* NO_RENAME */
+
+/*
+ Wrapper functions for fopen/fseek/ftell for >2GB files.
+
+ So, what we do here is add support for 4GB seeks. More appropriately,
+ 2^32 - 8193 bytes. This is tailored to the way zip uses fseek; it never
+ seeks backwards more than 8192 bytes.
+ */
+#ifdef _LARGEFILE64_SOURCE
+FILE *
+lfopen(const char *path, const char *mode)
+{
+ int fd;
+ FILE *f;
+ int flags;
+ int x;
+ char prev;
+
+ if (!path || !mode | !strlen(mode))
+ return NULL;
+
+ for (x = 0; x < strlen(mode); x++) {
+ switch (mode[x]) {
+ case 'r':
+ flags = O_RDONLY | O_LARGEFILE;
+ break;
+ case 'w':
+ flags = O_WRONLY | O_LARGEFILE | O_CREAT | O_TRUNC;
+ break;
+ case 'a':
+ flags = O_RDWR | O_LARGEFILE;
+ break;
+ case 'b': /* b has no effect */
+ continue;
+ case '+':
+ if (prev == 'r') {
+ flags = O_RDWR | O_LARGEFILE;
+ } else if (prev == 'w') {
+ flags = O_RDWR | O_LARGEFILE | O_CREAT |
+ O_TRUNC;
+ } else if (prev == 'a') {
+ flags = O_RDWR | O_LARGEFILE | O_CREAT;
+ } else
+ return NULL;
+ break;
+ }
+ prev = mode[x];
+ }
+
+ fd = open(path, flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (fd == -1)
+ return NULL;
+
+ f = fdopen(fd, mode);
+ return f;
+}
+
+int
+lfseek(FILE *f, ulg pos, int whence)
+{
+ struct stat64 sb;
+ ulg o, delta;
+ int ret;
+
+ /* Hurts performance */
+ fflush(f);
+
+ if (pos <= MAX_ZIP_SIZE) {
+ return (lseek64(fileno(f), pos, whence) == (off64_t)-1);
+ }
+
+ delta = ~((off64_t)pos - 1);
+ if (whence == SEEK_CUR) {
+ o = lseek64(fileno(f), 0, SEEK_CUR);
+ if (o < delta)
+ return -1;
+
+ o -= delta;
+ return (lseek64(fileno(f), o, SEEK_SET) == (off64_t)-1);
+ }
+
+ if (whence == SEEK_END) {
+ fstat64(fileno(f), &sb);
+
+ if ((ulg)sb.st_size < delta)
+ return -1;
+
+ o = (off64_t)((sb.st_size) - delta);
+ return (lseek64(fileno(f), o, SEEK_SET) == (off64_t)-1);
+ }
+
+ return -1;
+}
+
+
+ulg
+lftell(FILE *f)
+{
+ /* Hurts performance */
+ fflush(f);
+ return (ulg)lseek64(fileno(f), 0, SEEK_CUR);
+}
+
+#endif /* _LARGEFILE64_SOURCE */
+
--- zip-2.31/zip.h.4GB 2005-11-10 12:59:43.000000000 +0100
+++ zip-2.31/zip.h 2005-11-10 13:18:57.653283912 +0100
@@ -236,6 +236,7 @@
#define DOSTIME_MINIMUM ((ulg)0x00210000L)
#define DOSTIME_2038_01_18 ((ulg)0x74320000L)
+#define MAX_ZIP_SIZE 0xffffdffe /* Max archive / archive member size */
/* Public globals */
extern uch upper[256]; /* Country dependent case map table */
@@ -411,6 +412,11 @@
int putcentral OF((struct zlist far *, FILE *));
int putend OF((int, ulg, ulg, extent, char *, FILE *));
int zipcopy OF((struct zlist far *, FILE *, FILE *));
+#ifdef _LARGEFILE64_SOURCE
+int lfseek OF((FILE *, ulg, int));
+ulg lftell OF((FILE *));
+FILE *lfopen OF((const char *, const char *));
+#endif /* LF64 */
/* in fileio.c */
#ifndef UTIL
--- zip-2.31/tailor.h.4GB 2005-03-04 08:45:26.000000000 +0100
+++ zip-2.31/tailor.h 2005-11-10 13:11:18.909023640 +0100
@@ -368,12 +368,27 @@
# define DYN_ALLOC
#endif
+#ifdef _LARGEFILE64_SOURCE
+#define fopen lfopen
+#define fseek lfseek
+#define ftell lftell
+#endif /* LF64 */
+
#ifndef SSTAT
-# define SSTAT stat
+# ifdef _LARGEFILE64_SOURCE
+# define SSTAT stat64
+# else
+# define SSTAT stat
+# endif /* LF64 */
#endif
#ifdef S_IFLNK
-# define LSTAT lstat
-# define LSSTAT(n, s) (linkput ? lstat((n), (s)) : SSTAT((n), (s)))
+# ifdef _LARGEFILE64_SOURCE
+# define LSTAT lstat64
+# define LSSTAT(n, s) (linkput ? lstat64((n), (s)) : SSTAT((n), (s)))
+# else
+# define LSTAT lstat64
+# define LSSTAT(n, s) (linkput ? lstat64((n), (s)) : SSTAT((n), (s)))
+# endif /* LF64 */
#else
# define LSTAT SSTAT
# define LSSTAT SSTAT

12
zip-3.0-currdir.patch Normal file
View file

@ -0,0 +1,12 @@
diff -up zip30/util.c.currdir zip30/util.c
--- zip30/util.c.currdir 2009-11-16 12:42:17.783961701 +0100
+++ zip30/util.c 2009-11-16 12:42:58.185960707 +0100
@@ -493,6 +493,8 @@ int cs; /* force case-se
/* Compare the sh pattern p with the string s and return true if they match,
false if they don't or if there is a syntax error in the pattern. */
{
+ while (s[0] == '.' && s[1] == '/')
+ s += 2; /* strip redundant leading "./" sections */
return recmatch(p, s, cs) == 1;
}

20
zip-3.0-exec-shield.patch Normal file
View file

@ -0,0 +1,20 @@
diff -up zip30/crc_i386.S.exec_shield zip30/crc_i386.S
--- zip30/crc_i386.S.exec_shield 2009-11-13 18:37:45.000000000 +0100
+++ zip30/crc_i386.S 2009-11-13 18:39:54.435390166 +0100
@@ -302,3 +302,6 @@ _crc32: /* ulg c
#endif /* i386 || _i386 || _I386 || __i386 */
#endif /* !USE_ZLIB && !CRC_TABLE_ONLY */
+
+.section .note.GNU-stack, "", @progbits
+.previous
diff -up zip30/match.S.exec_shield zip30/match.S
--- zip30/match.S.exec_shield 2005-01-28 10:40:14.000000000 +0100
+++ zip30/match.S 2009-11-13 18:39:48.570389058 +0100
@@ -405,3 +405,6 @@ L__return:
#endif /* i386 || _I386 || _i386 || __i386 */
#endif /* !USE_ZLIB */
+
+.section .note.GNU-stack, "", @progbits
+.previous

View file

@ -0,0 +1,20 @@
--- a/zip.c
+++ a/zip.c
@@ -1028,7 +1028,7 @@ local void help_extended()
for (i = 0; i < sizeof(text)/sizeof(char *); i++)
{
- printf(text[i]);
+ printf("%s", text[i]);
putchar('\n');
}
#ifdef DOS
@@ -1225,7 +1225,7 @@ local void version_info()
CR_MAJORVER, CR_MINORVER, CR_BETA_VER, CR_VERSION_DATE);
for (i = 0; i < sizeof(cryptnote)/sizeof(char *); i++)
{
- printf(cryptnote[i]);
+ printf("%s", cryptnote[i]);
putchar('\n');
}
++i; /* crypt support means there IS at least one compilation option */

View file

@ -0,0 +1,11 @@
--- ./man/zip.1.old 2024-12-11 10:51:22.837845520 +0100
+++ ./man/zip.1 2024-12-11 10:51:34.458142392 +0100
@@ -2297,7 +2297,7 @@
.B \-X
.TP
.PD
-.B \-\-no\-extra
+.B \-\-strip\-extra
Do not save extra file attributes (Extended Attributes on OS/2, uid/gid
and file times on Unix). The zip format uses extra fields to include
additional information for each entry. Some extra fields are specific

View file

@ -1,7 +1,7 @@
--- zip-2.31/unix/Makefile.time 2007-02-07 09:36:30.000000000 +0100
+++ zip-2.31/unix/Makefile 2007-02-07 09:38:42.000000000 +0100
@@ -24,7 +24,7 @@
EXE =
E =
# probably can change this to 'install' if you have it
-INSTALL_PROGRAM = cp

15
zip-gnu89-build.patch Normal file
View file

@ -0,0 +1,15 @@
zip uses C89-only features, so it needs to be built in C89 mode.
diff --git a/unix/Makefile b/unix/Makefile
index 86cf54bf0f56cea9..244390893eab5fc6 100644
--- a/unix/Makefile
+++ b/unix/Makefile
@@ -202,7 +202,7 @@ generic: flags
eval $(MAKE) $(MAKEF) zips `cat flags`
generic_gcc:
- $(MAKE) $(MAKEF) generic CC=gcc CPP="gcc -E"
+ $(MAKE) $(MAKEF) generic CC="gcc -std=gnu89" CPP="gcc -E"
# AT&T 6300 PLUS (don't know yet how to allocate 64K bytes):
att6300nodir:

256
zip.spec
View file

@ -1,21 +1,27 @@
Summary: A file compression and packaging utility compatible with PKZIP
Name: zip
Version: 2.31
Release: 3%{?dist}
License: BSD
Group: Applications/Archiving
Source: http://ftp.info-zip.org/pub/infozip/src/zip231.tar.gz
Source1: ftp://ftp.freesoftware.com/pub/infozip/src/zcrypt29.tar.gz
URL: http://www.info-zip.org/pub/infozip/Zip.html
Patch0: zip23.patch
Patch1: exec-shield.patch
Patch2: zip23-umask.patch
Patch5: zip-2.3-currdir.patch
Patch6: zip-2.31-install.patch
Patch7: zip-2.31-near-4GB.patch
Patch8: zip-2.31-configure.patch
Patch9: zip-2.31-time.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Version: 3.0
Release: 46%{?dist}
License: Info-ZIP
Source: http://downloads.sourceforge.net/infozip/zip30.tar.gz
URL: http://www.info-zip.org/Zip.html
# This patch will probably be merged to zip 3.1
# http://www.info-zip.org/board/board.pl?m-1249408491/
Patch1: zip-3.0-exec-shield.patch
# Not upstreamed.
Patch2: zip-3.0-currdir.patch
# Not upstreamed.
Patch3: zip-3.0-time.patch
Patch4: man.patch
Patch5: zip-3.0-format-security.patch
Patch6: zipnote.patch
Patch7: zip-gnu89-build.patch
Patch8: buffer_overflow.patch
Patch9: zip-3.0-man-strip-extra.patch
BuildRequires: make
BuildRequires: bzip2-devel, gcc
Requires: unzip
%description
The zip program is a compression and file packaging utility. Zip is
@ -27,52 +33,216 @@ Install the zip package if you need to compress files using the zip
program.
%prep
%setup -q -a 1
%patch0 -p1 -b .zip
%patch1 -p1 -b .zip
%patch2 -p1 -b .umask
%patch5 -p1 -b .currdir
%patch6 -p1 -b .install
%patch7 -p1 -b .4gb
%patch8 -p1 -b .lhh
%patch9 -p1 -b .time
%setup -q -n zip30
%patch -P1 -p1 -b .exec-shield
%patch -P2 -p1 -b .currdir
%patch -P3 -p1 -b .time
%patch -P4 -p1 -b .man
%patch -P5 -p1 -b .format-security
%patch -P6 -p1 -b .zipnote
%patch -P7 -p1 -b .gnu89-build
%patch -P8 -p1
%patch -P9 -p1
%build
make -f unix/Makefile prefix=%{_prefix} "CFLAGS=$RPM_OPT_FLAGS -I. -DUNIX -D_LARGEFILE64_SOURCE" generic_gcc %{?_smp_mflags}
%{make_build} -f unix/Makefile prefix=%{_prefix} "CFLAGS_NOOPT=-I. -DUNIX $RPM_OPT_FLAGS" generic_gcc
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_bindir}
mkdir -p $RPM_BUILD_ROOT%{_bindir}
mkdir -p $RPM_BULD_ROOT%{_mandir}/man1
make -f unix/Makefile prefix=$RPM_BUILD_ROOT%{_prefix} \
MANDIR=$RPM_BUILD_ROOT%{_mandir}/man1 install
pushd $RPM_BUILD_ROOT
for n in zipnote zipsplit zip zipcloak ; do
chmod 755 .%{_bindir}/$n
done
popd
%clean
rm -rf $RPM_BUILD_ROOT
%{make_install} -f unix/Makefile prefix=$RPM_BUILD_ROOT%{_prefix} \
MANDIR=$RPM_BUILD_ROOT%{_mandir}/man1
%files
%defattr(-,root,root)
%doc README BUGS CHANGES MANUAL TODO WHATSNEW WHERE LICENSE
%license LICENSE
%doc README CHANGES TODO WHATSNEW WHERE README.CR
%doc proginfo/algorith.txt
%{_bindir}/zipnote
%{_bindir}/zipsplit
%{_bindir}/zip
%{_bindir}/zipcloak
%{_mandir}/man1/zip.1*
%{_mandir}/man1/zipcloak.1*
%{_mandir}/man1/zipnote.1*
%{_mandir}/man1/zipsplit.1*
%changelog
* Fri Jul 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-46
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-45
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-44
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Sun Jan 19 2025 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-43
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Wed Dec 11 2024 Jakub Martisko <jamartis@redhat.com> - 3.0-42
- Fix teh manpage: --no-extra option is actually called --strip-extra
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-41
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Sep 18 2023 Jakub Martisko <jamartis@redhat.com> - 3.0-39
- Fixc buffer overflow in unicode file names
Resolves: rhbz#2165653
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-38
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Apr 13 2023 Lukáš Zaoral <lzaoral@redhat.com> - 3.0-37
- migrate to SPDX license format
* Sat Jan 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-36
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Fri Nov 18 2022 Florian Weimer <fweimer@redhat.com> - 3.0-35
- Really build with -std=gnu89 (#2143565)
* Thu Nov 17 2022 Florian Weimer <fweimer@redhat.com> - 3.0-34
- Build with -std=gnu89 (#2143565)
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-33
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-32
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-31
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Fri Mar 05 2021 Jakub Martisko <jamartis@redhat.com> - 3.0-30
- Use generic build instead of generic_gcc
* Fri Mar 05 2021 Jakub Martisko <jamartis@redhat.com> - 3.0-29
- Use build macros
* Thu Jan 28 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-28
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-27
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-26
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-25
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-24
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-23
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Mar 01 2018 Jakub Martisko <jamartis@redhat.com> - 3.0-22
- Add gcc to buildrequires
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-21
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-20
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Wed Feb 01 2017 Stephen Gallagher <sgallagh@redhat.com> - 3.0-17
- Add missing %%license macro
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Fri Jun 26 2015 Petr Stodulka <pstodulk@redhat.com> - 3.0-15
- Added requirement for unzip (#1235956)
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Wed Jan 28 2015 Petr Stodulka <pstodulk@redhat.com> - 3.0-13
- fix crashing zipnote when editing .zip files (#1179420)
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Tue Apr 1 2014 Peter Robinson <pbrobinson@fedoraproject.org> 3.0-10
- Add patch to fix format-security FTBFS (RHBZ 1037412)
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Fri Apr 26 2013 Michal Luscon <mluscon@redhat.com> - 3.0-8
- Fix missing -q option in zipsplit and zipnote man pages
* Sat Feb 23 2013 Ville Skyttä <ville.skytta@iki.fi> - 3.0-7
- Enable bzip2 support.
- Fix bogus date in %%changelog.
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Mon May 24 2010 Karel Klic <kklic@redhat.com> - 3.0-2
- Removed BuildRoot tag
- Removed %%clean section
- Removed trailing whitespaces in the spec file
* Fri Nov 13 2009 Karel Klic <kklic@redhat.com> - 3.0-1
- New upstream version
- Removed zip23.patch, because ZMEM is not used anyway
- Removed zip-2.31-install.patch, problem solved in upstream
- Removed zip23-umask.patch, upstream uses mkstemp which solves the problem
- Removed zip-2.31-near-4GB.patch, because upstream version
handles large files well
- Removed zip-2.31-configure.patch, configure is better in the current version
- Removed zip-2.3-sf.patch, the error message doesn't exist in upstream anymore
- Removed zip-2.31-umask_mode.patch, which fixes also removed near-4GB patch
- Updated zip-2.31-time.patch for zip 3.0
- Updated exec-shield.patch for zip 3.0
- Updated zip-2.3-currdir.patch for zip 3.0
* Mon Jul 27 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.31-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.31-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Wed Feb 20 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 2.31-6
- Autorebuild for GCC 4.3
* Wed Nov 14 2007 Ivana Varekova <varekova@redhat.com> - 2.31-5
- add S_IWOTH option
* Mon Nov 5 2007 Ivana Varekova <varekova@redhat.com> - 2.31-4
- fix "zip does not honor umask setting when creating archives"
- fix "zip segfaults by attempt to archive big file"
- spec file cleanup
* Wed Feb 7 2007 Ivana Varekova <varekova@redhat.com> - 2.31-3
- incorporate the next peckage review comment
* Tue Feb 6 2007 Ivana Varekova <varekova@redhat.com> - 2.31-2
- incorporate the package review
- incorporate the package review
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 2.31-1.2.2
- rebuild
@ -141,7 +311,7 @@ rm -rf $RPM_BUILD_ROOT
* Sun Jun 24 2001 Elliot Lee <sopwith@redhat.com>
- Bump release + rebuild.
* Thu Aug 25 2000 Bill Nottingham <notting@redhat.com>
* Fri Aug 25 2000 Bill Nottingham <notting@redhat.com>
- add encryption code (#16878)
* Thu Jul 13 2000 Prospector <bugzilla@redhat.com>

View file

@ -1,23 +0,0 @@
diff -ur zip-2.3/zip.c zip-2.3-lhh/zip.c
--- zip-2.3/zip.c 1999-11-16 15:08:10.000000000 -0500
+++ zip-2.3-lhh/zip.c 2003-12-22 09:32:56.000000000 -0500
@@ -849,6 +849,7 @@
/* Add, update, freshen, or delete zip entries in a zip file. See the
command help in help() above. */
{
+ mode_t old_umask; /* umask prior to temp file creation */
int a; /* attributes of zip file */
ulg c; /* start of central directory */
int d; /* true if just adding to a zip file */
@@ -1830,9 +1831,11 @@
if ((tempzip = tempname(zipfile)) == NULL) {
ZIPERR(ZE_MEM, "allocating temp filename");
}
+ old_umask = umask(0066);
if ((tempzf = y = fopen(tempzip, FOPW_TMP)) == NULL) {
ZIPERR(ZE_TEMP, tempzip);
}
+ umask(old_umask);
}
#if (!defined(VMS) && !defined(CMS_MVS))

View file

@ -1,93 +0,0 @@
--- zip-2.3/zip.h.zip Mon Nov 8 14:36:51 1999
+++ zip-2.3/zip.h Tue Jan 11 11:46:06 2000
@@ -60,6 +60,7 @@
/* Set up portability */
#include "tailor.h"
+#include <strings.h>
#ifdef USE_ZLIB
# include "zlib.h"
@@ -433,12 +434,6 @@
int setfileattr OF((char *, int));
char *tempname OF((char *));
int fcopy OF((FILE *, FILE *, ulg));
-
-#ifdef ZMEM
- char *memset OF((char *, int, unsigned int));
- char *memcpy OF((char *, char *, unsigned int));
- int memcmp OF((char *, char *, unsigned int));
-#endif /* ZMEM */
/* in system dependent fileio code (<system>.c) */
#ifndef UTIL
--- zip-2.3/fileio.c.zip Sun Nov 7 05:29:03 1999
+++ zip-2.3/fileio.c Tue Jan 11 11:46:43 2000
@@ -918,67 +918,3 @@
}
#endif /* NO_RENAME */
-
-
-#ifdef ZMEM
-
-/************************/
-/* Function memset() */
-/************************/
-
-/*
- * memset - for systems without it
- * bill davidsen - March 1990
- */
-
-char *
-memset(buf, init, len)
-register char *buf; /* buffer loc */
-register int init; /* initializer */
-register unsigned int len; /* length of the buffer */
-{
- char *start;
-
- start = buf;
- while (len--) *(buf++) = init;
- return(start);
-}
-
-
-/************************/
-/* Function memcpy() */
-/************************/
-
-char *
-memcpy(dst,src,len) /* v2.0f */
-register char *dst, *src;
-register unsigned int len;
-{
- char *start;
-
- start = dst;
- while (len--)
- *dst++ = *src++;
- return(start);
-}
-
-
-/************************/
-/* Function memcmp() */
-/************************/
-
-int
-memcmp(b1,b2,len) /* jpd@usl.edu -- 11/16/90 */
-register char *b1, *b2;
-register unsigned int len;
-{
-
- if (len) do { /* examine each byte (if any) */
- if (*b1++ != *b2++)
- return (*((uch *)b1-1) - *((uch *)b2-1)); /* exit when miscompare */
- } while (--len);
-
- return(0); /* no miscompares, yield 0 result */
-}
-
-#endif /* ZMEM */

13
zipnote.patch Normal file
View file

@ -0,0 +1,13 @@
diff --git a/zipnote.c b/zipnote.c
index 5e02cb6..996f012 100644
--- a/zipnote.c
+++ b/zipnote.c
@@ -661,7 +661,7 @@ char **argv; /* command line tokens */
if ((r = zipcopy(z)) != ZE_OK)
ziperr(r, "was copying an entry");
}
- fclose(x);
+ fclose(in_file);
/* Write central directory and end of central directory with new comments */
if ((c = zftello(y)) == (zoff_t)-1) /* get start of central */