RHEL 9.0.0 Alpha bootstrap
The content of this branch was automatically imported from Fedora ELN with the following as its source: https://src.fedoraproject.org/rpms/zziplib#064e05a582b0706888980a9354ea73e43251ca8a
This commit is contained in:
parent
5e5c5f8cd0
commit
ad8647b136
7
.gitignore
vendored
7
.gitignore
vendored
@ -0,0 +1,7 @@
|
||||
zziplib-0.13.49.tar.bz2
|
||||
/zziplib-0.13.59.tar.bz2
|
||||
/zziplib-0.13.60.tar.bz2
|
||||
/zziplib-0.13.62.tar.bz2
|
||||
/v0.13.67.tar.gz
|
||||
/v0.13.68.tar.gz
|
||||
/v0.13.69.tar.gz
|
71
CVE-2018-16548.part1.patch
Normal file
71
CVE-2018-16548.part1.patch
Normal file
@ -0,0 +1,71 @@
|
||||
From 9411bde3e4a70a81ff3ffd256b71927b2d90dcbb Mon Sep 17 00:00:00 2001
|
||||
From: jmoellers <josef.moellers@suse.com>
|
||||
Date: Fri, 7 Sep 2018 11:32:04 +0200
|
||||
Subject: [PATCH] Avoid memory leak from __zzip_parse_root_directory().
|
||||
|
||||
---
|
||||
test/test.zip | Bin 1361 -> 1361 bytes
|
||||
zzip/zip.c | 36 ++++++++++++++++++++++++++++++++++--
|
||||
2 files changed, 34 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/zzip/zip.c b/zzip/zip.c
|
||||
index 88b833b..a685280 100644
|
||||
--- a/zzip/zip.c
|
||||
+++ b/zzip/zip.c
|
||||
@@ -475,9 +475,15 @@ __zzip_parse_root_directory(int fd,
|
||||
} else
|
||||
{
|
||||
if (io->fd.seeks(fd, zz_rootseek + zz_offset, SEEK_SET) < 0)
|
||||
+ {
|
||||
+ free(hdr0);
|
||||
return ZZIP_DIR_SEEK;
|
||||
+ }
|
||||
if (io->fd.read(fd, &dirent, sizeof(dirent)) < __sizeof(dirent))
|
||||
+ {
|
||||
+ free(hdr0);
|
||||
return ZZIP_DIR_READ;
|
||||
+ }
|
||||
d = &dirent;
|
||||
}
|
||||
|
||||
@@ -577,12 +583,38 @@ __zzip_parse_root_directory(int fd,
|
||||
|
||||
if (hdr_return)
|
||||
*hdr_return = hdr0;
|
||||
+ else
|
||||
+ {
|
||||
+ /* If it is not assigned to *hdr_return, it will never be free()'d */
|
||||
+ free(hdr0);
|
||||
+ /* Make sure we don't free it again in case of error */
|
||||
+ hdr0 = NULL;
|
||||
+ }
|
||||
} /* else zero (sane) entries */
|
||||
# ifndef ZZIP_ALLOW_MODULO_ENTRIES
|
||||
- return (entries != zz_entries ? ZZIP_CORRUPTED : 0);
|
||||
+ if (entries != zz_entries)
|
||||
+ {
|
||||
+ /* If it was assigned to *hdr_return, undo assignment */
|
||||
+ if (p_reclen && hdr_return)
|
||||
+ *hdr_return = NULL;
|
||||
+ /* Free it, if it was not already free()'d */
|
||||
+ if (hdr0 != NULL)
|
||||
+ free(hdr0);
|
||||
+ return ZZIP_CORRUPTED;
|
||||
+ }
|
||||
# else
|
||||
- return ((entries & (unsigned)0xFFFF) != zz_entries ? ZZIP_CORRUPTED : 0);
|
||||
+ if (((entries & (unsigned)0xFFFF) != zz_entries)
|
||||
+ {
|
||||
+ /* If it was assigned to *hdr_return, undo assignment */
|
||||
+ if (p_reclen && hdr_return)
|
||||
+ *hdr_return = NULL;
|
||||
+ /* Free it, if it was not already free()'d */
|
||||
+ if (hdr0 != NULL)
|
||||
+ free(hdr0);
|
||||
+ return ZZIP_CORRUPTED;
|
||||
+ }
|
||||
# endif
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
/* ------------------------- high-level interface ------------------------- */
|
50
CVE-2018-16548.part2.patch
Normal file
50
CVE-2018-16548.part2.patch
Normal file
@ -0,0 +1,50 @@
|
||||
From d2e5d5c53212e54a97ad64b793a4389193fec687 Mon Sep 17 00:00:00 2001
|
||||
From: jmoellers <josef.moellers@suse.com>
|
||||
Date: Fri, 7 Sep 2018 11:49:28 +0200
|
||||
Subject: [PATCH] Avoid memory leak from __zzip_parse_root_directory().
|
||||
|
||||
---
|
||||
zzip/zip.c | 25 ++-----------------------
|
||||
1 file changed, 2 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/zzip/zip.c b/zzip/zip.c
|
||||
index a685280..51a1a4d 100644
|
||||
--- a/zzip/zip.c
|
||||
+++ b/zzip/zip.c
|
||||
@@ -587,34 +587,13 @@ __zzip_parse_root_directory(int fd,
|
||||
{
|
||||
/* If it is not assigned to *hdr_return, it will never be free()'d */
|
||||
free(hdr0);
|
||||
- /* Make sure we don't free it again in case of error */
|
||||
- hdr0 = NULL;
|
||||
}
|
||||
} /* else zero (sane) entries */
|
||||
# ifndef ZZIP_ALLOW_MODULO_ENTRIES
|
||||
- if (entries != zz_entries)
|
||||
- {
|
||||
- /* If it was assigned to *hdr_return, undo assignment */
|
||||
- if (p_reclen && hdr_return)
|
||||
- *hdr_return = NULL;
|
||||
- /* Free it, if it was not already free()'d */
|
||||
- if (hdr0 != NULL)
|
||||
- free(hdr0);
|
||||
- return ZZIP_CORRUPTED;
|
||||
- }
|
||||
+ return (entries != zz_entries) ? ZZIP_CORRUPTED : 0;
|
||||
# else
|
||||
- if (((entries & (unsigned)0xFFFF) != zz_entries)
|
||||
- {
|
||||
- /* If it was assigned to *hdr_return, undo assignment */
|
||||
- if (p_reclen && hdr_return)
|
||||
- *hdr_return = NULL;
|
||||
- /* Free it, if it was not already free()'d */
|
||||
- if (hdr0 != NULL)
|
||||
- free(hdr0);
|
||||
- return ZZIP_CORRUPTED;
|
||||
- }
|
||||
+ return ((entries & (unsigned)0xFFFF) != zz_entries) ? ZZIP_CORRUPTED : 0;
|
||||
# endif
|
||||
- return 0;
|
||||
}
|
||||
|
||||
/* ------------------------- high-level interface ------------------------- */
|
22
CVE-2018-16548.part3.patch
Normal file
22
CVE-2018-16548.part3.patch
Normal file
@ -0,0 +1,22 @@
|
||||
From 0e1dadb05c1473b9df2d7b8f298dab801778ef99 Mon Sep 17 00:00:00 2001
|
||||
From: jmoellers <josef.moellers@suse.com>
|
||||
Date: Fri, 7 Sep 2018 13:55:35 +0200
|
||||
Subject: [PATCH] One more free() to avoid memory leak.
|
||||
|
||||
---
|
||||
zzip/zip.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/zzip/zip.c b/zzip/zip.c
|
||||
index 51a1a4d..bc6c080 100644
|
||||
--- a/zzip/zip.c
|
||||
+++ b/zzip/zip.c
|
||||
@@ -589,6 +589,8 @@ __zzip_parse_root_directory(int fd,
|
||||
free(hdr0);
|
||||
}
|
||||
} /* else zero (sane) entries */
|
||||
+ else
|
||||
+ free(hdr0);
|
||||
# ifndef ZZIP_ALLOW_MODULO_ENTRIES
|
||||
return (entries != zz_entries) ? ZZIP_CORRUPTED : 0;
|
||||
# else
|
55
CVE-2018-17828.part2.patch
Normal file
55
CVE-2018-17828.part2.patch
Normal file
@ -0,0 +1,55 @@
|
||||
diff --git a/bins/unzip-mem.c b/bins/unzip-mem.c
|
||||
index c45cb72..ff564a5 100644
|
||||
--- a/bins/unzip-mem.c
|
||||
+++ b/bins/unzip-mem.c
|
||||
@@ -88,10 +88,49 @@ static void zzip_mem_entry_pipe(ZZIP_MEM_DISK* disk,
|
||||
}
|
||||
}
|
||||
|
||||
+static inline void
|
||||
+remove_dotdotslash(char *path)
|
||||
+{
|
||||
+ /* Note: removing "../" from the path ALWAYS shortens the path, never adds to it! */
|
||||
+ char *dotdotslash;
|
||||
+ int warned = 0;
|
||||
+
|
||||
+ dotdotslash = path;
|
||||
+ while ((dotdotslash = strstr(dotdotslash, "../")) != NULL)
|
||||
+ {
|
||||
+ /*
|
||||
+ * Remove only if at the beginning of the pathname ("../path/name")
|
||||
+ * or when preceded by a slash ("path/../name"),
|
||||
+ * otherwise not ("path../name..")!
|
||||
+ */
|
||||
+ if (dotdotslash == path || dotdotslash[-1] == '/')
|
||||
+ {
|
||||
+ char *src, *dst;
|
||||
+ if (!warned)
|
||||
+ {
|
||||
+ /* Note: the first time through the pathname is still intact */
|
||||
+ fprintf(stderr, "Removing \"../\" path component(s) in %s\n", path);
|
||||
+ warned = 1;
|
||||
+ }
|
||||
+ /* We cannot use strcpy(), as there "The strings may not overlap" */
|
||||
+ for (src = dotdotslash+3, dst=dotdotslash; (*dst = *src) != '\0'; src++, dst++)
|
||||
+ ;
|
||||
+ }
|
||||
+ else
|
||||
+ dotdotslash +=3; /* skip this instance to prevent infinite loop */
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void zzip_mem_entry_make(ZZIP_MEM_DISK* disk,
|
||||
ZZIP_MEM_ENTRY* entry)
|
||||
{
|
||||
- FILE* file = fopen (entry->zz_name, "wb");
|
||||
+ char name_stripped[PATH_MAX];
|
||||
+ FILE* file;
|
||||
+
|
||||
+ strncpy(name_stripped, entry->zz_name, PATH_MAX);
|
||||
+ remove_dotdotslash(name_stripped);
|
||||
+
|
||||
+ file = fopen (name_stripped, "wb");
|
||||
if (file) { zzip_mem_entry_pipe (disk, entry, file); fclose (file); }
|
||||
perror (entry->zz_name);
|
||||
if (status < EXIT_WARNINGS) status = EXIT_WARNINGS;
|
341
CVE-2018-17828.patch
Normal file
341
CVE-2018-17828.patch
Normal file
@ -0,0 +1,341 @@
|
||||
From 81dfa6b3e08f6934885ba5c98939587d6850d08e Mon Sep 17 00:00:00 2001
|
||||
From: Josef Moellers <jmoellers@suse.de>
|
||||
Date: Thu, 4 Oct 2018 14:21:48 +0200
|
||||
Subject: [PATCH] Fix issue #62: Remove any "../" components from pathnames of
|
||||
extracted files. [CVE-2018-17828]
|
||||
|
||||
---
|
||||
bins/unzzipcat-big.c | 57 +++++++++++++++++++++++++++++++++++++++++++-
|
||||
bins/unzzipcat-mem.c | 57 +++++++++++++++++++++++++++++++++++++++++++-
|
||||
bins/unzzipcat-mix.c | 57 +++++++++++++++++++++++++++++++++++++++++++-
|
||||
bins/unzzipcat-zip.c | 57 +++++++++++++++++++++++++++++++++++++++++++-
|
||||
4 files changed, 224 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/bins/unzzipcat-big.c b/bins/unzzipcat-big.c
|
||||
index 982d262..88c4d65 100644
|
||||
--- a/bins/unzzipcat-big.c
|
||||
+++ b/bins/unzzipcat-big.c
|
||||
@@ -53,6 +53,48 @@ static void unzzip_cat_file(FILE* disk, char* name, FILE* out)
|
||||
}
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * NAME: remove_dotdotslash
|
||||
+ * PURPOSE: To remove any "../" components from the given pathname
|
||||
+ * ARGUMENTS: path: path name with maybe "../" components
|
||||
+ * RETURNS: Nothing, "path" is modified in-place
|
||||
+ * NOTE: removing "../" from the path ALWAYS shortens the path, never adds to it!
|
||||
+ * Also, "path" is not used after creating it.
|
||||
+ * So modifying "path" in-place is safe to do.
|
||||
+ */
|
||||
+static inline void
|
||||
+remove_dotdotslash(char *path)
|
||||
+{
|
||||
+ /* Note: removing "../" from the path ALWAYS shortens the path, never adds to it! */
|
||||
+ char *dotdotslash;
|
||||
+ int warned = 0;
|
||||
+
|
||||
+ dotdotslash = path;
|
||||
+ while ((dotdotslash = strstr(dotdotslash, "../")) != NULL)
|
||||
+ {
|
||||
+ /*
|
||||
+ * Remove only if at the beginning of the pathname ("../path/name")
|
||||
+ * or when preceded by a slash ("path/../name"),
|
||||
+ * otherwise not ("path../name..")!
|
||||
+ */
|
||||
+ if (dotdotslash == path || dotdotslash[-1] == '/')
|
||||
+ {
|
||||
+ char *src, *dst;
|
||||
+ if (!warned)
|
||||
+ {
|
||||
+ /* Note: the first time through the pathname is still intact */
|
||||
+ fprintf(stderr, "Removing \"../\" path component(s) in %s\n", path);
|
||||
+ warned = 1;
|
||||
+ }
|
||||
+ /* We cannot use strcpy(), as there "The strings may not overlap" */
|
||||
+ for (src = dotdotslash+3, dst=dotdotslash; (*dst = *src) != '\0'; src++, dst++)
|
||||
+ ;
|
||||
+ }
|
||||
+ else
|
||||
+ dotdotslash +=3; /* skip this instance to prevent infinite loop */
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void makedirs(const char* name)
|
||||
{
|
||||
char* p = strrchr(name, '/');
|
||||
@@ -70,6 +112,16 @@ static void makedirs(const char* name)
|
||||
|
||||
static FILE* create_fopen(char* name, char* mode, int subdirs)
|
||||
{
|
||||
+ char *name_stripped;
|
||||
+ FILE *fp;
|
||||
+ int mustfree = 0;
|
||||
+
|
||||
+ if ((name_stripped = strdup(name)) != NULL)
|
||||
+ {
|
||||
+ remove_dotdotslash(name_stripped);
|
||||
+ name = name_stripped;
|
||||
+ mustfree = 1;
|
||||
+ }
|
||||
if (subdirs)
|
||||
{
|
||||
char* p = strrchr(name, '/');
|
||||
@@ -79,7 +131,10 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
|
||||
free (dir_name);
|
||||
}
|
||||
}
|
||||
- return fopen(name, mode);
|
||||
+ fp = fopen(name, mode);
|
||||
+ if (mustfree)
|
||||
+ free(name_stripped);
|
||||
+ return fp;
|
||||
}
|
||||
|
||||
|
||||
diff --git a/bins/unzzipcat-mem.c b/bins/unzzipcat-mem.c
|
||||
index 9bc966b..793bde8 100644
|
||||
--- a/bins/unzzipcat-mem.c
|
||||
+++ b/bins/unzzipcat-mem.c
|
||||
@@ -58,6 +58,48 @@ static void unzzip_mem_disk_cat_file(ZZIP_MEM_DISK* disk, char* name, FILE* out)
|
||||
}
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * NAME: remove_dotdotslash
|
||||
+ * PURPOSE: To remove any "../" components from the given pathname
|
||||
+ * ARGUMENTS: path: path name with maybe "../" components
|
||||
+ * RETURNS: Nothing, "path" is modified in-place
|
||||
+ * NOTE: removing "../" from the path ALWAYS shortens the path, never adds to it!
|
||||
+ * Also, "path" is not used after creating it.
|
||||
+ * So modifying "path" in-place is safe to do.
|
||||
+ */
|
||||
+static inline void
|
||||
+remove_dotdotslash(char *path)
|
||||
+{
|
||||
+ /* Note: removing "../" from the path ALWAYS shortens the path, never adds to it! */
|
||||
+ char *dotdotslash;
|
||||
+ int warned = 0;
|
||||
+
|
||||
+ dotdotslash = path;
|
||||
+ while ((dotdotslash = strstr(dotdotslash, "../")) != NULL)
|
||||
+ {
|
||||
+ /*
|
||||
+ * Remove only if at the beginning of the pathname ("../path/name")
|
||||
+ * or when preceded by a slash ("path/../name"),
|
||||
+ * otherwise not ("path../name..")!
|
||||
+ */
|
||||
+ if (dotdotslash == path || dotdotslash[-1] == '/')
|
||||
+ {
|
||||
+ char *src, *dst;
|
||||
+ if (!warned)
|
||||
+ {
|
||||
+ /* Note: the first time through the pathname is still intact */
|
||||
+ fprintf(stderr, "Removing \"../\" path component(s) in %s\n", path);
|
||||
+ warned = 1;
|
||||
+ }
|
||||
+ /* We cannot use strcpy(), as there "The strings may not overlap" */
|
||||
+ for (src = dotdotslash+3, dst=dotdotslash; (*dst = *src) != '\0'; src++, dst++)
|
||||
+ ;
|
||||
+ }
|
||||
+ else
|
||||
+ dotdotslash +=3; /* skip this instance to prevent infinite loop */
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void makedirs(const char* name)
|
||||
{
|
||||
char* p = strrchr(name, '/');
|
||||
@@ -75,6 +117,16 @@ static void makedirs(const char* name)
|
||||
|
||||
static FILE* create_fopen(char* name, char* mode, int subdirs)
|
||||
{
|
||||
+ char *name_stripped;
|
||||
+ FILE *fp;
|
||||
+ int mustfree = 0;
|
||||
+
|
||||
+ if ((name_stripped = strdup(name)) != NULL)
|
||||
+ {
|
||||
+ remove_dotdotslash(name_stripped);
|
||||
+ name = name_stripped;
|
||||
+ mustfree = 1;
|
||||
+ }
|
||||
if (subdirs)
|
||||
{
|
||||
char* p = strrchr(name, '/');
|
||||
@@ -84,7 +136,10 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
|
||||
free (dir_name);
|
||||
}
|
||||
}
|
||||
- return fopen(name, mode);
|
||||
+ fp = fopen(name, mode);
|
||||
+ if (mustfree)
|
||||
+ free(name_stripped);
|
||||
+ return fp;
|
||||
}
|
||||
|
||||
static int unzzip_cat (int argc, char ** argv, int extract)
|
||||
diff --git a/bins/unzzipcat-mix.c b/bins/unzzipcat-mix.c
|
||||
index 91c2f00..73b6ed6 100644
|
||||
--- a/bins/unzzipcat-mix.c
|
||||
+++ b/bins/unzzipcat-mix.c
|
||||
@@ -69,6 +69,48 @@ static void unzzip_cat_file(ZZIP_DIR* disk, char* name, FILE* out)
|
||||
}
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * NAME: remove_dotdotslash
|
||||
+ * PURPOSE: To remove any "../" components from the given pathname
|
||||
+ * ARGUMENTS: path: path name with maybe "../" components
|
||||
+ * RETURNS: Nothing, "path" is modified in-place
|
||||
+ * NOTE: removing "../" from the path ALWAYS shortens the path, never adds to it!
|
||||
+ * Also, "path" is not used after creating it.
|
||||
+ * So modifying "path" in-place is safe to do.
|
||||
+ */
|
||||
+static inline void
|
||||
+remove_dotdotslash(char *path)
|
||||
+{
|
||||
+ /* Note: removing "../" from the path ALWAYS shortens the path, never adds to it! */
|
||||
+ char *dotdotslash;
|
||||
+ int warned = 0;
|
||||
+
|
||||
+ dotdotslash = path;
|
||||
+ while ((dotdotslash = strstr(dotdotslash, "../")) != NULL)
|
||||
+ {
|
||||
+ /*
|
||||
+ * Remove only if at the beginning of the pathname ("../path/name")
|
||||
+ * or when preceded by a slash ("path/../name"),
|
||||
+ * otherwise not ("path../name..")!
|
||||
+ */
|
||||
+ if (dotdotslash == path || dotdotslash[-1] == '/')
|
||||
+ {
|
||||
+ char *src, *dst;
|
||||
+ if (!warned)
|
||||
+ {
|
||||
+ /* Note: the first time through the pathname is still intact */
|
||||
+ fprintf(stderr, "Removing \"../\" path component(s) in %s\n", path);
|
||||
+ warned = 1;
|
||||
+ }
|
||||
+ /* We cannot use strcpy(), as there "The strings may not overlap" */
|
||||
+ for (src = dotdotslash+3, dst=dotdotslash; (*dst = *src) != '\0'; src++, dst++)
|
||||
+ ;
|
||||
+ }
|
||||
+ else
|
||||
+ dotdotslash +=3; /* skip this instance to prevent infinite loop */
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void makedirs(const char* name)
|
||||
{
|
||||
char* p = strrchr(name, '/');
|
||||
@@ -86,6 +128,16 @@ static void makedirs(const char* name)
|
||||
|
||||
static FILE* create_fopen(char* name, char* mode, int subdirs)
|
||||
{
|
||||
+ char *name_stripped;
|
||||
+ FILE *fp;
|
||||
+ int mustfree = 0;
|
||||
+
|
||||
+ if ((name_stripped = strdup(name)) != NULL)
|
||||
+ {
|
||||
+ remove_dotdotslash(name_stripped);
|
||||
+ name = name_stripped;
|
||||
+ mustfree = 1;
|
||||
+ }
|
||||
if (subdirs)
|
||||
{
|
||||
char* p = strrchr(name, '/');
|
||||
@@ -95,7 +147,10 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
|
||||
free (dir_name);
|
||||
}
|
||||
}
|
||||
- return fopen(name, mode);
|
||||
+ fp = fopen(name, mode);
|
||||
+ if (mustfree)
|
||||
+ free(name_stripped);
|
||||
+ return fp;
|
||||
}
|
||||
|
||||
static int unzzip_cat (int argc, char ** argv, int extract)
|
||||
diff --git a/bins/unzzipcat-zip.c b/bins/unzzipcat-zip.c
|
||||
index 2810f85..7f7f3fa 100644
|
||||
--- a/bins/unzzipcat-zip.c
|
||||
+++ b/bins/unzzipcat-zip.c
|
||||
@@ -69,6 +69,48 @@ static void unzzip_cat_file(ZZIP_DIR* disk, char* name, FILE* out)
|
||||
}
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * NAME: remove_dotdotslash
|
||||
+ * PURPOSE: To remove any "../" components from the given pathname
|
||||
+ * ARGUMENTS: path: path name with maybe "../" components
|
||||
+ * RETURNS: Nothing, "path" is modified in-place
|
||||
+ * NOTE: removing "../" from the path ALWAYS shortens the path, never adds to it!
|
||||
+ * Also, "path" is not used after creating it.
|
||||
+ * So modifying "path" in-place is safe to do.
|
||||
+ */
|
||||
+static inline void
|
||||
+remove_dotdotslash(char *path)
|
||||
+{
|
||||
+ /* Note: removing "../" from the path ALWAYS shortens the path, never adds to it! */
|
||||
+ char *dotdotslash;
|
||||
+ int warned = 0;
|
||||
+
|
||||
+ dotdotslash = path;
|
||||
+ while ((dotdotslash = strstr(dotdotslash, "../")) != NULL)
|
||||
+ {
|
||||
+ /*
|
||||
+ * Remove only if at the beginning of the pathname ("../path/name")
|
||||
+ * or when preceded by a slash ("path/../name"),
|
||||
+ * otherwise not ("path../name..")!
|
||||
+ */
|
||||
+ if (dotdotslash == path || dotdotslash[-1] == '/')
|
||||
+ {
|
||||
+ char *src, *dst;
|
||||
+ if (!warned)
|
||||
+ {
|
||||
+ /* Note: the first time through the pathname is still intact */
|
||||
+ fprintf(stderr, "Removing \"../\" path component(s) in %s\n", path);
|
||||
+ warned = 1;
|
||||
+ }
|
||||
+ /* We cannot use strcpy(), as there "The strings may not overlap" */
|
||||
+ for (src = dotdotslash+3, dst=dotdotslash; (*dst = *src) != '\0'; src++, dst++)
|
||||
+ ;
|
||||
+ }
|
||||
+ else
|
||||
+ dotdotslash +=3; /* skip this instance to prevent infinite loop */
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void makedirs(const char* name)
|
||||
{
|
||||
char* p = strrchr(name, '/');
|
||||
@@ -86,6 +128,16 @@ static void makedirs(const char* name)
|
||||
|
||||
static FILE* create_fopen(char* name, char* mode, int subdirs)
|
||||
{
|
||||
+ char *name_stripped;
|
||||
+ FILE *fp;
|
||||
+ int mustfree = 0;
|
||||
+
|
||||
+ if ((name_stripped = strdup(name)) != NULL)
|
||||
+ {
|
||||
+ remove_dotdotslash(name_stripped);
|
||||
+ name = name_stripped;
|
||||
+ mustfree = 1;
|
||||
+ }
|
||||
if (subdirs)
|
||||
{
|
||||
char* p = strrchr(name, '/');
|
||||
@@ -95,7 +147,10 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
|
||||
free (dir_name);
|
||||
}
|
||||
}
|
||||
- return fopen(name, mode);
|
||||
+ fp = fopen(name, mode);
|
||||
+ if (mustfree)
|
||||
+ free(name_stripped);
|
||||
+ return fp;
|
||||
}
|
||||
|
||||
static int unzzip_cat (int argc, char ** argv, int extract)
|
1
sources
Normal file
1
sources
Normal file
@ -0,0 +1 @@
|
||||
SHA512 (v0.13.69.tar.gz) = ade026289737f43ca92a8746818d87dd7618d473dbce159546ce9071c9e4cbe164a6b1c9efff16efb7aa0327b2ec6b34f3256c6bda19cd6e325703fffc810ef0
|
31
zziplib-0.13.69-multilib.patch
Normal file
31
zziplib-0.13.69-multilib.patch
Normal file
@ -0,0 +1,31 @@
|
||||
diff -up ./_builddir/zzip/_config.h.orig ./_builddir/zzip/_config.h
|
||||
--- ./_builddir/zzip/_config.h.orig 2018-07-23 09:11:59.971840954 +0300
|
||||
+++ ./_builddir/zzip/_config.h 2018-07-23 09:12:07.438731527 +0300
|
||||
@@ -139,6 +139,11 @@
|
||||
/* whether the system defaults to 32bit off_t but can do 64bit when requested
|
||||
*/
|
||||
/* #undef LARGEFILE_SENSITIVE */
|
||||
+#if __WORDSIZE == 32
|
||||
+#ifndef ZZIP_LARGEFILE_SENSITIVE
|
||||
+#define ZZIP_LARGEFILE_SENSITIVE 1
|
||||
+#endif
|
||||
+#endif
|
||||
|
||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
||||
#ifndef ZZIP_LT_OBJDIR
|
||||
@@ -197,6 +202,15 @@
|
||||
/* The number of bytes in type short */
|
||||
/* #undef SIZEOF_SHORT */
|
||||
|
||||
+/* The number of bytes in type long */
|
||||
+#ifndef ZZIP_SIZEOF_LONG
|
||||
+#if __WORDSIZE == 32
|
||||
+#define ZZIP_SIZEOF_LONG 4
|
||||
+#elif __WORDSIZE == 64
|
||||
+#define ZZIP_SIZEOF_LONG 8
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#ifndef ZZIP_STDC_HEADERS
|
||||
#define ZZIP_STDC_HEADERS 1
|
281
zziplib.spec
Normal file
281
zziplib.spec
Normal file
@ -0,0 +1,281 @@
|
||||
Summary: Lightweight library to easily extract data from zip files
|
||||
Name: zziplib
|
||||
Version: 0.13.69
|
||||
Release: 9%{?dist}
|
||||
License: LGPLv2+ or MPLv1.1
|
||||
URL: http://zziplib.sourceforge.net/
|
||||
Source: https://github.com/gdraheim/zziplib/archive/v%{version}.tar.gz
|
||||
Patch0: zziplib-0.13.69-multilib.patch
|
||||
|
||||
Patch1: CVE-2018-17828.patch
|
||||
Patch2: CVE-2018-17828.part2.patch
|
||||
Patch3: CVE-2018-16548.part1.patch
|
||||
Patch4: CVE-2018-16548.part2.patch
|
||||
Patch5: CVE-2018-16548.part3.patch
|
||||
|
||||
BuildRequires: gcc
|
||||
BuildRequires: perl-interpreter
|
||||
BuildRequires: python2
|
||||
BuildRequires: python2-rpm-macros
|
||||
BuildRequires: zip
|
||||
BuildRequires: xmlto
|
||||
BuildRequires: zlib-devel
|
||||
BuildRequires: SDL-devel
|
||||
BuildRequires: pkgconfig
|
||||
#BuildRequires: autoconf
|
||||
#BuildRequires: automake
|
||||
|
||||
%description
|
||||
The zziplib library is intentionally lightweight, it offers the ability to
|
||||
easily extract data from files archived in a single zip file. Applications
|
||||
can bundle files into a single zip archive and access them. The implementation
|
||||
is based only on the (free) subset of compression with the zlib algorithm
|
||||
which is actually used by the zip/unzip tools.
|
||||
|
||||
%package utils
|
||||
Summary: Utilities for the zziplib library
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description utils
|
||||
The zziplib library is intentionally lightweight, it offers the ability to
|
||||
easily extract data from files archived in a single zip file. Applications
|
||||
can bundle files into a single zip archive and access them. The implementation
|
||||
is based only on the (free) subset of compression with the zlib algorithm
|
||||
which is actually used by the zip/unzip tools.
|
||||
|
||||
This packages contains all the utilities that come with the zziplib library.
|
||||
|
||||
%package devel
|
||||
Summary: Development files for the zziplib library
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: pkgconfig
|
||||
Requires: zlib-devel
|
||||
Requires: SDL-devel
|
||||
|
||||
%description devel
|
||||
The zziplib library is intentionally lightweight, it offers the ability to
|
||||
easily extract data from files archived in a single zip file. Applications
|
||||
can bundle files into a single zip archive and access them. The implementation
|
||||
is based only on the (free) subset of compression with the zlib algorithm
|
||||
which is actually used by the zip/unzip tools.
|
||||
|
||||
This package contains files required to build applications that will use the
|
||||
zziplib library.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
|
||||
# Force py2 for the build
|
||||
find . -name '*.py' | xargs sed -i 's@#! /usr/bin/python@#! %__python2@g;s@#! /usr/bin/env python@#! %__python2@g'
|
||||
|
||||
%build
|
||||
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
|
||||
export PYTHON=%__python2
|
||||
%configure \
|
||||
--disable-static \
|
||||
--enable-sdl \
|
||||
--enable-frame-pointer \
|
||||
--enable-builddir=_builddir
|
||||
# Remove rpath on 64bit archs
|
||||
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' */libtool
|
||||
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' */libtool
|
||||
# Only patch generated _config.h on non-i686 and armv7hl
|
||||
# These platforms have a correct _config.h already
|
||||
%ifnarch i686 armv7hl
|
||||
cd _builddir
|
||||
%apply_patch %{PATCH0} -p2
|
||||
cd ..
|
||||
%endif
|
||||
|
||||
%make_build
|
||||
|
||||
|
||||
%install
|
||||
%make_install
|
||||
|
||||
%ldconfig_scriptlets
|
||||
|
||||
%files
|
||||
%doc docs/COPYING* ChangeLog README TODO
|
||||
%{_libdir}/*.so.*
|
||||
|
||||
%files utils
|
||||
%{_bindir}/*
|
||||
|
||||
%files devel
|
||||
%doc docs/README.SDL docs/*.htm
|
||||
%{_includedir}/*
|
||||
%exclude %{_libdir}/*.la
|
||||
%{_libdir}/*.so
|
||||
%{_libdir}/pkgconfig/*.pc
|
||||
%{_datadir}/aclocal/*.m4
|
||||
%{_mandir}/man3/*
|
||||
|
||||
%changelog
|
||||
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.69-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||
|
||||
* Tue Jul 14 2020 Tom Stellard <tstellar@redhat.com> - 0.13.69-8
|
||||
- Use make macros
|
||||
- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro
|
||||
|
||||
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.69-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.69-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
|
||||
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.69-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Thu Jan 24 2019 Jakub Martisko <jamartis@redhat.com> - 0.13.69-4
|
||||
- Add the missing CVE-2018-17828.part2.patch file
|
||||
- Fix Formating of the previous 2 changelog entries
|
||||
|
||||
* Thu Jan 24 2019 Jakub Martisko <jamartis@redhat.com> - 0.13.69-3
|
||||
- Related: #1626202
|
||||
- Resolves: CVE-2018-16548
|
||||
|
||||
* Thu Jan 24 2019 Jakub Martisko <jamartis@redhat.com> - 0.13.69-2
|
||||
- Related: 1635890
|
||||
- Resolves: CVE-2018-17828
|
||||
|
||||
* Mon Jul 23 2018 Alexander Bokovoy <abokovoy@redhat.com> - 0.13.69-1
|
||||
- Update to 0.13.69 release
|
||||
- Fixes: #1598246 (CVE-2018-6541)
|
||||
- Fixes: #1554673 (CVE-2018-7727)
|
||||
- Use versioned python executables everywhere
|
||||
|
||||
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.68-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Sun Mar 18 2018 Iryna Shcherbina <ishcherb@redhat.com> - 0.13.68-2
|
||||
- Update Python 2 dependency declarations to new packaging standards
|
||||
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
|
||||
|
||||
* Wed Feb 14 2018 Alexander Bokovoy <abokovoy@redhat.com> - 0.13.68-1
|
||||
- 0.13.68
|
||||
- Fixes: #1543942 (CVE-2018-6484)
|
||||
|
||||
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.67-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||
|
||||
* Thu Feb 01 2018 Alexander Bokovoy <abokovoy@redhat.com> - 0.13.67-1
|
||||
- Update release
|
||||
- CVE-2018-6381
|
||||
|
||||
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.62-10
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||
|
||||
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.62-9
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||
|
||||
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.62-8
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||
|
||||
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.62-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.62-6
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.62-5
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||
|
||||
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.62-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||
|
||||
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.62-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
|
||||
|
||||
* Wed Jan 30 2013 Jindrich Novy <jnovy@redhat.com> 0.13.62-2
|
||||
- rebuild with -fno-strict-aliasing
|
||||
|
||||
* Wed Oct 10 2012 Matthias Saou <matthias@saou.eu> 0.13.62-1
|
||||
- Update to 0.13.62.
|
||||
- Remove no longer needed -Wl patch.
|
||||
|
||||
* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.60-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
|
||||
|
||||
* Thu Mar 8 2012 Tom Callaway <spot@fedoraproject.org> - 0.13.60-1
|
||||
- update to 0.13.60
|
||||
|
||||
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.59-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
|
||||
|
||||
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.59-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
|
||||
|
||||
* Thu Dec 9 2010 Hans de Goede <hdegoede@redhat.com> 0.13.59-2
|
||||
- Fix broken zzip/_config.h which causes apps using zziplib to fail to compile
|
||||
|
||||
* Sat Dec 4 2010 Matthias Saou <http://freshrpms.net/> 0.13.59-1
|
||||
- Update to 0.13.59.
|
||||
- Remove no longer needed 'open' patch.
|
||||
- Rebase the multilib patch, still required.
|
||||
- Re-enable _smp_mflags, build works again with it apparently.
|
||||
|
||||
* Mon Jul 27 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.49-8
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
|
||||
|
||||
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.13.49-7
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
|
||||
|
||||
* Mon Dec 22 2008 Matthias Saou <http://freshrpms.net/> 0.13.49-6
|
||||
- Patch _config.h to make it identical for 32bit and 64bit archs (#343521).
|
||||
|
||||
* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org>
|
||||
- Autorebuild for GCC 4.3
|
||||
|
||||
* Wed Aug 8 2007 Matthias Saou <http://freshrpms.net/> 0.13.49-4
|
||||
- Include patch to fix fd.open calls with recent glibc.
|
||||
- Disable _smp_mflags since the docs fail to build.
|
||||
|
||||
* Fri Aug 3 2007 Matthias Saou <http://freshrpms.net/> 0.13.49-3
|
||||
- Update License field.
|
||||
|
||||
* Tue Jun 19 2007 Matthias Saou <http://freshrpms.net/> 0.13.49-2
|
||||
- Disable static lib build instead of excluding it later.
|
||||
- Remove rpath on 64bit archs.
|
||||
- Switch to using DESTDIR install method.
|
||||
|
||||
* Mon Mar 26 2007 Matthias Saou <http://freshrpms.net/> 0.13.49-1
|
||||
- Update to 0.13.49 to fix CVE-2007-1614 (rhbz #233700).
|
||||
- Include new man3 pages to the devel sub-package.
|
||||
|
||||
* Mon Aug 28 2006 Matthias Saou <http://freshrpms.net/> 0.13.47-1
|
||||
- Update to 0.13.47.
|
||||
- FC6 rebuild.
|
||||
|
||||
* Mon Jul 24 2006 Matthias Saou <http://freshrpms.net/> 0.13.45-3
|
||||
- Split off -utils sub-package (#199467). Could have been plain "zzip"?
|
||||
- Have sub-packages require exact release too.
|
||||
- Build require automake to make the aclocal-1.9 check happy.
|
||||
- Use --enable-frame-pointer otherwise -g gets removed from the CFLAGS.
|
||||
|
||||
* Mon Mar 6 2006 Matthias Saou <http://freshrpms.net/> 0.13.45-2
|
||||
- FC5 rebuild.
|
||||
|
||||
* Thu Feb 9 2006 Matthias Saou <http://freshrpms.net/> 0.13.45-1
|
||||
- Update to 0.13.45.
|
||||
- Exclude static library.
|
||||
|
||||
* Sun May 22 2005 Jeremy Katz <katzj@redhat.com> - 0.13.38-2
|
||||
- rebuild on all arches
|
||||
|
||||
* Tue Apr 5 2005 Matthias Saou <http://freshrpms.net/> 0.13.38-1
|
||||
- Update to 0.13.38, fixes gcc4 compile issues (Adrian Reber).
|
||||
|
||||
* Tue Nov 16 2004 Matthias Saou <http://freshrpms.net/> 0.13.36-2
|
||||
- Bump release to provide Extras upgrade path.
|
||||
|
||||
* Tue Jun 8 2004 Matthias Saou <http://freshrpms.net/> 0.13.36-1
|
||||
- Initial RPM release.
|
||||
|
Loading…
Reference in New Issue
Block a user