+dpkg (1.18.25mdw1) unstable; urgency=medium
+
+ [Mark Wooding]
+ * Kludge `tar_header_decode' to handle spurious `errno' setting better.
+
+ -- Mark Wooding <mdw@distorted.org.uk> Thu, 18 Jun 2020 18:34:29 +0100
+
dpkg (1.18.25) stretch; urgency=medium
[ Guillem Jover ]
{
long checksum;
- errno = 0;
-
if (memcmp(h->magic, TAR_MAGIC_GNU, 6) == 0)
d->format = TAR_FORMAT_GNU;
else if (memcmp(h->magic, TAR_MAGIC_USTAR, 6) == 0)
else
d->name = m_strndup(h->name, sizeof(h->name));
d->linkname = m_strndup(h->linkname, sizeof(h->linkname));
+ errno = 0;
+
d->stat.mode = tar_header_get_unix_mode(h);
/* Even though off_t is signed, we use an unsigned parser here because
* negative offsets are not allowed. */
TAR_ATOUL(h->devminor, dev_t));
else
d->dev = makedev(0, 0);
+ if (errno) return 0;
if (*h->user)
d->stat.uname = m_strndup(h->user, sizeof(h->user));
else
d->stat.uname = NULL;
+ errno = 0;
+
d->stat.uid = TAR_ATOUL(h->uid, uid_t);
+ if (errno) return 0;
if (*h->group)
d->stat.gname = m_strndup(h->group, sizeof(h->group));
else
d->stat.gname = NULL;
- d->stat.gid = TAR_ATOUL(h->gid, gid_t);
+ errno = 0;
+ d->stat.gid = TAR_ATOUL(h->gid, gid_t);
checksum = tar_atol8(h->checksum, sizeof(h->checksum));
+ if (errno) return 0;
- /* Check for parse errors. */
- if (errno)
- return 0;
return tar_header_checksum(h) == checksum;
}