X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fxheader.c;h=3926a7f81ad2601437cec8afe6dbc9a1e1653786;hb=8b4453b4e2f1d89b969a80b1349dc28311885c4a;hp=6f8c140b12cdd229b8551ca26a4386893f906534;hpb=10edb315da532371e65a7d83a16f50ade5b545e4;p=chaz%2Ftar diff --git a/src/xheader.c b/src/xheader.c index 6f8c140..3926a7f 100644 --- a/src/xheader.c +++ b/src/xheader.c @@ -51,6 +51,9 @@ locate_handler (char const *keyword) return NULL; } +/* Decodes a single extended header record. Advances P to the next + record. + Returns true on success, false otherwise. */ static bool decode_record (char **p, struct tar_stat_info *st) { @@ -61,13 +64,13 @@ decode_record (char **p, struct tar_stat_info *st) struct xhdr_tab const *t; if (**p == 0) - return true; + return false; len = strtoul (*p, p, 10); if (**p != ' ') { - ERROR ((0, 0, _("Malformed extended header"))); - return true; + ERROR ((0, 0, _("Malformed extended header: missing whitespace after the length"))); + return false; } keyword = ++*p; @@ -77,8 +80,8 @@ decode_record (char **p, struct tar_stat_info *st) if (**p != '=') { - ERROR ((0, 0, _("Malformed extended header"))); - return true; + ERROR ((0, 0, _("Malformed extended header: missing equal sign"))); + return false; } eqp = *p; @@ -98,7 +101,7 @@ decode_record (char **p, struct tar_stat_info *st) } *eqp = '='; *p = &start[len]; - return false; + return true; } void @@ -108,7 +111,7 @@ xheader_decode (struct tar_stat_info *st) char *endp = &extended_header.buffer[extended_header.size-1]; while (p < endp) - if (decode_record (&p, st)) + if (!decode_record (&p, st)) break; }