Re: [PATCH 24/31] archive-tar: make hash size independent

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 12.02.2019 um 02:22 schrieb brian m. carlson:
> diff --git a/builtin/get-tar-commit-id.c b/builtin/get-tar-commit-id.c
> index 2706fcfaf2..2760549e91 100644
> --- a/builtin/get-tar-commit-id.c
> +++ b/builtin/get-tar-commit-id.c
> @@ -5,6 +5,7 @@
>  #include "commit.h"
>  #include "tar.h"
>  #include "builtin.h"
> +#include "strbuf.h"
>  #include "quote.h"
>
>  static const char builtin_get_tar_commit_id_usage[] =
> @@ -21,6 +22,8 @@ int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix)
>  	char *content = buffer + RECORDSIZE;
>  	const char *comment;
>  	ssize_t n;
> +	char *hdrprefix;
> +	int ret;
>
>  	if (argc != 1)
>  		usage(builtin_get_tar_commit_id_usage);
> @@ -32,10 +35,14 @@ int cmd_get_tar_commit_id(int argc, const char **argv, const char *prefix)
>  		die_errno("git get-tar-commit-id: EOF before reading tar header");
>  	if (header->typeflag[0] != 'g')
>  		return 1;
> -	if (!skip_prefix(content, "52 comment=", &comment))
> +
> +	hdrprefix = xstrfmt("%zu comment=", the_hash_algo->hexsz + strlen(" comment=") + 2 + 1);
> +	ret = skip_prefix(content, hdrprefix, &comment);
> +	free(hdrprefix);
> +	if (!ret)
>  		return 1;
>
> -	if (write_in_full(1, comment, 41) < 0)
> +	if (write_in_full(1, comment, the_hash_algo->hexsz + 1) < 0)
>  		die_errno("git get-tar-commit-id: write error");
>
>  	return 0;

That command currently prints the pax comment in tar archives if it
looks like a SHA1 hash based on its length.  It should continue to do
so, and _also_ show longer hashes.  Your change makes it _only_ show
those longer hashes.

So it could check for all known valid hash lengths in turn, or accept
any payload length between 40 and the_hash_algo->hexsz, or loosen up
totally and show comments of any length.

René




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux