[File] [PATCH] Skip tar C path for Gentoo binary package files

Christos Zoulas christos at zoulas.com
Wed Sep 7 14:17:17 UTC 2022


On 2022-09-05 10:19 am, Michał Górny wrote:
> Detect Gentoo GLEP 78 (GPKG) binary package files in is_tar() function
> and force falling back to using the magic rules for these files.  This
> permits them to be correctly detected and described, rather than being
> reported as a generic tar file.
> ---
>  src/is_tar.c              |  12 ++++++++++++
>  tests/Makefile.am         |   2 ++
>  tests/gpkg-1-zst.result   |   1 +
>  tests/gpkg-1-zst.testfile | Bin 0 -> 1024 bytes
>  4 files changed, 15 insertions(+)
>  create mode 100644 tests/gpkg-1-zst.result
>  create mode 100644 tests/gpkg-1-zst.testfile
> 
> Please let me know if you prefer another format for the binary test 
> case
> file.
> 
> diff --git a/src/is_tar.c b/src/is_tar.c
> index 82b08051..0feb7021 100644
> --- a/src/is_tar.c
> +++ b/src/is_tar.c
> @@ -98,15 +98,27 @@ file_is_tar(struct magic_set *ms, const struct 
> buffer *b)
>  private int
>  is_tar(const unsigned char *buf, size_t nbytes)
>  {
> +	static const char gpkg_match[] = "/gpkg-1";
> +
>  	const union record *header = RCAST(const union record *,
>  	    RCAST(const void *, buf));
>  	size_t i;
>  	int sum, recsum;
>  	const unsigned char *p, *ep;
> +	const char *nulp;
> 
>  	if (nbytes < sizeof(*header))
>  		return 0;
> 
> +	/* If the file looks like Gentoo GLEP 78 binary package (GPKG),
> +	 * don't waste time on further checks and fall back to magic rules.
> +	 */
> +	nulp = memchr(header->header.name, 0, sizeof(header->header.name));
> +	if (nulp != NULL && nulp >= header->header.name + sizeof(gpkg_match) 
> &&
> +	    memcmp(nulp - sizeof(gpkg_match) + 1, gpkg_match,
> +	    sizeof(gpkg_match)) == 0)
> +			return 0;
> +
>  	recsum = from_oct(header->header.chksum, 
> sizeof(header->header.chksum));
> 
>  	sum = 0;
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 22120a8b..0fa6aec2 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -29,6 +29,8 @@ fit-map-data.result \
>  fit-map-data.testfile \
>  gedcom.result \
>  gedcom.testfile \
> +gpkg-1-zst.result \
> +gpkg-1-zst.testfile \
>  hddrawcopytool.result \
>  hddrawcopytool.testfile \
>  issue311docx.result \
> diff --git a/tests/gpkg-1-zst.result b/tests/gpkg-1-zst.result
> new file mode 100644
> index 00000000..af9a080e
> --- /dev/null
> +++ b/tests/gpkg-1-zst.result
> @@ -0,0 +1 @@
> +Gentoo GLEP 78 (GPKG) binary package using zstd compression
> \ No newline at end of file
> diff --git a/tests/gpkg-1-zst.testfile b/tests/gpkg-1-zst.testfile
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..00c71c018b736f17270b4deac31612b18223007d
> GIT binary patch
> literal 1024
> zcmd1I%Pvk%EJ)Qg)HBjE)Gad7HPlZp$WGTaWS|-_00J`;69y0s1n4wa%+SQxz{J$d
> z(9qn7!2n1anlmUEP|XE+3 at R-yNh|_736GNDER~5R{&Q1H5>paO67_%~qgPd2LaF~j
> e5sWkb4Gm09P0bik<KM)<#CSCRDGhgG^aB7t5iF1Z
> 
> literal 0
> HcmV?d00001

Committed, thanks!

christos
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: OpenPGP digital signature
URL: <https://mailman.astron.com/pipermail/file/attachments/20220907/25a0d75a/attachment.asc>


More information about the File mailing list