From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: <git@vger.kernel.org>
Cc: "Derrick Stolee" <dstolee@microsoft.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH v2 12/13] hex: default to the_hash_algo on zero algorithm value
Date: Mon, 26 Apr 2021 01:03:00 +0000 [thread overview]
Message-ID: <20210426010301.1093562-13-sandals@crustytoothpaste.net> (raw)
In-Reply-To: <20210426010301.1093562-1-sandals@crustytoothpaste.net>
There are numerous places in the codebase where we assume we can
initialize data by zeroing all its bytes. However, when we do that with
a struct object_id, it leaves the structure with a zero value for the
algorithm, which is invalid.
We could forbid this pattern and require that all struct object_id
instances be initialized using oidclr, but this seems burdensome and
it's unnatural to most C programmers. Instead, if the algorithm is
zero, assume we wanted to use the default hash algorithm instead.
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
hex.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/hex.c b/hex.c
index e7af18fe55..74d256f239 100644
--- a/hex.c
+++ b/hex.c
@@ -124,6 +124,13 @@ char *hash_to_hex_algop_r(char *buffer, const unsigned char *hash,
char *buf = buffer;
int i;
+ /*
+ * Our struct object_id has been memset to 0, so default to printing
+ * using the default hash.
+ */
+ if (algop == &hash_algos[0])
+ algop = the_hash_algo;
+
for (i = 0; i < algop->rawsz; i++) {
unsigned int val = *hash++;
*buf++ = hex[val >> 4];
next prev parent reply other threads:[~2021-04-26 1:04 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-26 1:02 [PATCH v2 00/13] SHA-256 / SHA-1 interop, part 1 brian m. carlson
2021-04-26 1:02 ` [PATCH v2 01/13] hash: add an algo member to struct object_id brian m. carlson
2021-05-07 13:58 ` Matheus Tavares Bernardino
2021-05-07 20:07 ` brian m. carlson
2021-04-26 1:02 ` [PATCH v2 02/13] Always use oidread to read into " brian m. carlson
2021-04-26 1:02 ` [PATCH v2 03/13] http-push: set algorithm when reading object ID brian m. carlson
2021-04-26 1:02 ` [PATCH v2 04/13] hash: add a function to finalize object IDs brian m. carlson
2021-04-26 1:02 ` [PATCH v2 05/13] Use the final_oid_fn to finalize hashing of " brian m. carlson
2021-04-26 1:02 ` [PATCH v2 06/13] builtin/pack-redundant: avoid casting buffers to struct object_id brian m. carlson
2021-04-26 1:02 ` [PATCH v2 07/13] hash: set, copy, and use algo field in " brian m. carlson
2021-04-26 1:02 ` [PATCH v2 08/13] hash: provide per-algorithm null OIDs brian m. carlson
2021-04-26 1:02 ` [PATCH v2 09/13] builtin/show-index: set the algorithm for object IDs brian m. carlson
2021-04-26 1:02 ` [PATCH v2 10/13] commit-graph: don't store file hashes as struct object_id brian m. carlson
2021-04-26 1:02 ` [PATCH v2 11/13] builtin/pack-objects: avoid using struct object_id for pack hash brian m. carlson
2021-04-26 1:03 ` brian m. carlson [this message]
2021-04-26 1:03 ` [PATCH v2 13/13] hex: print objects using the hash algorithm member brian m. carlson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210426010301.1093562-13-sandals@crustytoothpaste.net \
--to=sandals@crustytoothpaste.net \
--cc=avarab@gmail.com \
--cc=dstolee@microsoft.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).