summaryrefslogtreecommitdiffstats
path: root/archive/rpmunpack/patch
diff options
context:
space:
mode:
Diffstat (limited to 'archive/rpmunpack/patch')
-rw-r--r--archive/rpmunpack/patch37
1 files changed, 37 insertions, 0 deletions
diff --git a/archive/rpmunpack/patch b/archive/rpmunpack/patch
new file mode 100644
index 0000000000..ffe364b0d3
--- /dev/null
+++ b/archive/rpmunpack/patch
@@ -0,0 +1,37 @@
+--- rpmunpack.orig 2003-01-15 16:01:41.000000000 +0100
++++ rpmunpack.c 2003-01-15 16:14:55.000000000 +0100
+@@ -58,9 +58,10 @@
+ /*
+ * Main program
+ */
+-void main(int argc, char **argv)
++int main(int argc, char **argv)
+ {
+ int len, status = 0;
++ char *x;
+
+ /* Get our own program name */
+ if ((progname = strrchr(argv[0], '/')) == NULL)
+@@ -94,6 +95,13 @@
+
+ /* Open output file */
+ strcat(buffer, ".cpio.gz");
++
++ /* check for directory traversal stuff */
++ while ( (x = strchr( buffer, 47 )) != NULL ){
++ *x = 95;
++ /* replace the / with a _ */
++ }
++
+ if (infile == STDIN_FILENO)
+ outfile = STDOUT_FILENO;
+ else if ((outfile = open(buffer, O_WRONLY | O_CREAT | O_TRUNC, 0644)) < 0) {
+@@ -111,7 +119,7 @@
+ * never appears before offset 0x200, so we skip these first couple of
+ * bytes to make the signature scan a little more reliable.
+ */
+- myread(0x200 - 74);
++ myread( (int) 0x200 - 74);
+ while (status < 2) {
+ myread(1);
+ if (status == 0 && buffer[0] == GZ_MAGIC_1)