Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2020-06-25 22:48:37 +0300
committerJunio C Hamano <gitster@pobox.com>2020-06-26 00:19:23 +0300
commitf39ad38410da554af54966bf74fa0402355852ac (patch)
tree77a7d07f1287021f060f250cfdff7d4baadf30f3 /builtin/fast-export.c
parent8a494955835e3635926d4f6f4607c1ed95b011fc (diff)
fast-export: use local array to store anonymized oid
Some older versions of gcc complain about this line: builtin/fast-export.c:412:2: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing] put_be32(oid.hash + hashsz - 4, counter++); ^ This seems to be a false positive, as there's no type-punning at all here. oid.hash is an array of unsigned char; when we pass it to a function it decays to a pointer to unsigned char. We do take a void pointer in put_be32(), but it's immediately aliased with another pointer to unsigned char (and clearly the compiler is looking inside the inlined put_be32(), since the warning doesn't happen with -O0). This happens on gcc 4.8 and 4.9, but not later versions (I tested gcc 6, 7, 8, and 9). We can work around it by using a local array instead of an object_id struct. This is a little more intimate with the details of object_id, but for whatever reason doesn't seem to trigger the compiler warning. We can revert this patch once we decide that those gcc versions are too old to care about for a warning like this (gcc 4.8 is the default compiler for Ubuntu Trusty, which is out-of-support but not fully end-of-life'd until April 2022). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/fast-export.c')
-rw-r--r--builtin/fast-export.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index c6ecf404d70..9f37895d4cf 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -405,12 +405,12 @@ static char *generate_fake_oid(void *data)
{
static uint32_t counter = 1; /* avoid null oid */
const unsigned hashsz = the_hash_algo->rawsz;
- struct object_id oid;
+ unsigned char out[GIT_MAX_RAWSZ];
char *hex = xmallocz(GIT_MAX_HEXSZ);
- oidclr(&oid);
- put_be32(oid.hash + hashsz - 4, counter++);
- return oid_to_hex_r(hex, &oid);
+ hashclr(out);
+ put_be32(out + hashsz - 4, counter++);
+ return hash_to_hex_algop_r(hex, out, the_hash_algo);
}
static const char *anonymize_oid(const char *oid_hex)