Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 38 | magnus | 1 | Description: Detect old-style GNU headers correctly |
| 2 | Author: Steinar H. Gunderson <sesse@debian.org> |
||
| 3 | |||
| 4 | --- libtar-1.2.20.orig/lib/decode.c |
||
| 5 | +++ libtar-1.2.20/lib/decode.c |
||
| 6 | @@ -69,7 +69,14 @@ th_get_pathname(TAR *t) |
||
| 7 | return NULL; |
||
| 8 | } |
||
| 9 | |||
| 10 | - if (t->th_buf.prefix[0] == '\0') |
||
| 11 | + /* |
||
| 12 | + * Old GNU headers (also used by newer GNU tar when doing incremental |
||
| 13 | + * dumps) use the POSIX prefix field for many other things, such as |
||
| 14 | + * mtime and ctime. New-style GNU headers don't, but also don't use the |
||
| 15 | + * POSIX prefix field. Thus, only honor the prefix field if the archive |
||
| 16 | + * is actually a POSIX archive. This is the same logic as GNU tar uses. |
||
| 17 | + */ |
||
| 18 | + if (strncmp(t->th_buf.magic, TMAGIC, TMAGLEN - 1) != 0 || t->th_buf.prefix[0] == '\0') |
||
| 19 | { |
||
| 20 | sprintf(t->th_pathname, "%.100s", t->th_buf.name); |
||
| 21 | } |