[hackers] [sbase] tar: Skip over data before processing the next entry || sin
commit 7a0d9fb3eaa85f8dec5ba5e3bd6ecee681ab2816
Author: sin <sin_AT_2f30.org>
Date: Wed Apr 22 23:22:07 2015 +0100
tar: Skip over data before processing the next entry
When we selectively process entries from the archive, ensure that
we jump over the data section of each uninteresting entry before going
on to process the next entry. Not doing so, leaves the file stream
pointer in the wrong place.
diff --git a/tar.c b/tar.c
index ccecff9..b2a4d9f 100644
--- a/tar.c
+++ b/tar.c
_AT_@ -323,17 +323,22 @@ xt(int argc, char *argv[], int (*fn)(char *, ssize_t, char[BLKSIZ]))
snprintf(fname + n, sizeof(fname) - n, "%.*s",
(int)sizeof(h->name), h->name);
+ if ((size = strtol(h->size, &p, 8)) < 0 || *p != '\0')
+ eprintf("strtol %s: invalid number\n", h->size);
+
if (argc) {
/* only extract the given files */
for (i = 0; i < argc; i++)
if (!strcmp(argv[i], fname))
break;
- if (i == argc)
+ if (i == argc) {
+ for (; size > 0; size -= BLKSIZ)
+ if (fread(b, BLKSIZ, 1, tarfile) != 1)
+ eprintf("fread %s:", tarfilename);
continue;
+ }
}
- if ((size = strtol(h->size, &p, 8)) < 0 || *p != '\0')
- eprintf("strtol %s: invalid number\n", h->size);
fn(fname, size, b);
}
if (ferror(tarfile))
Received on Thu Apr 23 2015 - 00:24:45 CEST
This archive was generated by hypermail 2.3.0
: Thu Apr 23 2015 - 00:36:30 CEST