From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: <git@vger.kernel.org>
Cc: Junio C Hamano <gitster@pobox.com>,
Elijah Newren <newren@gmail.com>, Jeff King <peff@peff.net>,
Phillip Wood <phillip.wood123@gmail.com>
Subject: [PATCH v2 3/7] hex: make hex_to_bytes accept kind of hex to use
Date: Mon, 7 Sep 2026 19:59:36 +0000 [thread overview]
Message-ID: <20260907195941.1024289-4-sandals@crustytoothpaste.net> (raw)
In-Reply-To: <20260907195941.1024289-1-sandals@crustytoothpaste.net>
Similarly to the previous commit, introduce an option for hex_to_bytes
to allow us to specify the kind of hex to use: lowercase only or not.
For now, everything remains the same as before, but we will change
things in a future commit.
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
---
builtin/index-pack.c | 2 +-
diagnose.c | 2 +-
hex-ll.c | 4 ++--
hex-ll.h | 2 +-
http-push.c | 5 +++--
notes.c | 5 +++--
object-file.c | 2 +-
7 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 6b2a87e2d3..44ac72ef1e 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -1866,7 +1866,7 @@ static void repack_local_links(void)
while (strbuf_getline_lf(&line, out) != EOF) {
unsigned char binary[GIT_MAX_RAWSZ];
if (line.len != the_hash_algo->hexsz ||
- !hex_to_bytes(binary, line.buf, line.len))
+ !hex_to_bytes(binary, line.buf, line.len, HEX_KIND_MIXED))
die(_("index-pack: Expecting full hex object ID lines only from pack-objects."));
/*
diff --git a/diagnose.c b/diagnose.c
index 5092bf80d3..fc11cea229 100644
--- a/diagnose.c
+++ b/diagnose.c
@@ -112,7 +112,7 @@ static void loose_objs_stats(struct strbuf *buf, const char *path)
while ((e = readdir_skip_dot_and_dotdot(dir)) != NULL)
if (get_dtype(e, &count_path, 0) == DT_DIR &&
strlen(e->d_name) == 2 &&
- !hex_to_bytes(&c, e->d_name, 1)) {
+ !hex_to_bytes(&c, e->d_name, 1, HEX_KIND_MIXED)) {
strbuf_setlen(&count_path, base_path_len);
strbuf_addf(&count_path, "%s/", e->d_name);
total += (count = count_files(&count_path));
diff --git a/hex-ll.c b/hex-ll.c
index 8f5a4e4644..3b7d22a824 100644
--- a/hex-ll.c
+++ b/hex-ll.c
@@ -71,10 +71,10 @@ const signed char hexval_lc_table[256] = {
-1, -1, -1, -1, -1, -1, -1, -1, /* f8-ff */
};
-int hex_to_bytes(unsigned char *binary, const char *hex, size_t len)
+int hex_to_bytes(unsigned char *binary, const char *hex, size_t len, enum hexkind kind)
{
for (; len; len--, hex += 2) {
- unsigned int val = (hexval(hex[0], HEX_KIND_MIXED) << 4) | hexval(hex[1], HEX_KIND_MIXED);
+ unsigned int val = (hexval(hex[0], kind) << 4) | hexval(hex[1], kind);
if (val & ~0xff)
return -1;
diff --git a/hex-ll.h b/hex-ll.h
index 26847c7b2f..fe698f0c76 100644
--- a/hex-ll.h
+++ b/hex-ll.h
@@ -28,6 +28,6 @@ static inline int hex2chr(const char *s, enum hexkind kind)
* values to `binary` as `len` bytes. Return 0 on success, or -1 if
* the input does not consist of hex digits).
*/
-int hex_to_bytes(unsigned char *binary, const char *hex, size_t len);
+int hex_to_bytes(unsigned char *binary, const char *hex, size_t len, enum hexkind kind);
#endif
diff --git a/http-push.c b/http-push.c
index b8f3faaed9..b5c5bad3db 100644
--- a/http-push.c
+++ b/http-push.c
@@ -1031,12 +1031,13 @@ static int get_oid_hex_from_objpath(const char *path, struct object_id *oid)
if (strlen(path) != the_hash_algo->hexsz + 1)
return -1;
- if (hex_to_bytes(oid->hash, path, 1))
+ if (hex_to_bytes(oid->hash, path, 1, HEX_KIND_MIXED))
return -1;
path += 2;
path++; /* skip '/' */
- return hex_to_bytes(oid->hash + 1, path, the_hash_algo->rawsz - 1);
+ return hex_to_bytes(oid->hash + 1, path, the_hash_algo->rawsz - 1,
+ HEX_KIND_MIXED);
}
static void process_ls_object(struct remote_ls_ctx *ls)
diff --git a/notes.c b/notes.c
index ec9c2cb150..99b8b15d81 100644
--- a/notes.c
+++ b/notes.c
@@ -428,7 +428,7 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
goto handle_non_note;
if (hex_to_bytes(object_oid.hash + prefix_len, entry.path,
- hashsz - prefix_len))
+ hashsz - prefix_len, HEX_KIND_MIXED))
goto handle_non_note; /* entry.path is not a SHA1 */
memset(object_oid.hash + hashsz, 0, GIT_MAX_RAWSZ - hashsz);
@@ -442,7 +442,8 @@ static void load_subtree(struct notes_tree *t, struct leaf_node *subtree,
/* internal nodes must be trees */
goto handle_non_note;
- if (hex_to_bytes(object_oid.hash + len++, entry.path, 1))
+ if (hex_to_bytes(object_oid.hash + len++, entry.path, 1,
+ HEX_KIND_MIXED))
goto handle_non_note; /* entry.path is not a SHA1 */
/*
diff --git a/object-file.c b/object-file.c
index a4cbf8b081..892be4bbb2 100644
--- a/object-file.c
+++ b/object-file.c
@@ -1079,7 +1079,7 @@ int for_each_file_in_obj_subdir(unsigned int subdir_nr,
strbuf_add(path, de->d_name, namelen);
if (namelen == algop->hexsz - 2 &&
!hex_to_bytes(oid.hash + 1, de->d_name,
- algop->rawsz - 1)) {
+ algop->rawsz - 1, HEX_KIND_MIXED)) {
oid_set_algo(&oid, algop);
memset(oid.hash + algop->rawsz, 0,
GIT_MAX_RAWSZ - algop->rawsz);
next prev parent reply other threads:[~2026-09-07 19:59 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-29 23:32 [RFC PATCH 0/6] Git 3.0: restrict hex object IDs to lowercase only brian m. carlson
2026-07-29 23:32 ` [RFC PATCH 1/6] hex: add functionality for lowercase-only hex brian m. carlson
2026-07-31 7:38 ` Junio C Hamano
2026-08-25 15:39 ` Junio C Hamano
2026-08-25 21:44 ` brian m. carlson
2026-07-29 23:32 ` [RFC PATCH 2/6] hex: allow specifying hex type with hex2chr brian m. carlson
2026-07-29 23:32 ` [RFC PATCH 3/6] hex: make hex_to_bytes accept kind of hex to use brian m. carlson
2026-07-31 7:38 ` Junio C Hamano
2026-08-01 14:35 ` Jeff King
2026-07-29 23:32 ` [RFC PATCH 4/6] hex: label usages of hex parsing for object IDs brian m. carlson
2026-07-31 3:24 ` Junio C Hamano
2026-08-25 16:11 ` Junio C Hamano
2026-07-29 23:32 ` [RFC PATCH 5/6] object-name: use hexval brian m. carlson
2026-08-25 16:19 ` Junio C Hamano
2026-08-25 19:44 ` Elijah Newren
2026-08-25 21:41 ` brian m. carlson
2026-07-29 23:32 ` [RFC PATCH 6/6] hex: allow only lowercase object IDs in breaking changes mode brian m. carlson
2026-07-31 7:48 ` Junio C Hamano
2026-07-31 12:33 ` Junio C Hamano
2026-08-02 22:09 ` brian m. carlson
2026-08-04 19:32 ` Junio C Hamano
2026-08-04 21:46 ` brian m. carlson
2026-08-05 3:09 ` Michael Montalbo
2026-08-25 9:04 ` Phillip Wood
2026-08-25 21:36 ` brian m. carlson
2026-09-07 13:37 ` Phillip Wood
2026-08-25 16:36 ` Junio C Hamano
2026-08-25 19:44 ` Elijah Newren
2026-07-30 8:21 ` [RFC PATCH 0/6] Git 3.0: restrict hex object IDs to lowercase only Junio C Hamano
2026-07-30 21:18 ` brian m. carlson
2026-08-01 14:45 ` Jeff King
2026-08-01 18:22 ` Junio C Hamano
2026-08-02 21:55 ` brian m. carlson
2026-09-07 19:59 ` [PATCH v2 0/7] " brian m. carlson
2026-09-07 19:59 ` [PATCH v2 1/7] hex: add functionality for lowercase-only hex brian m. carlson
2026-09-07 19:59 ` [PATCH v2 2/7] hex: allow specifying hex type with hex2chr brian m. carlson
2026-09-07 19:59 ` brian m. carlson [this message]
2026-09-07 19:59 ` [PATCH v2 4/7] hex: label usages of hex parsing for object IDs brian m. carlson
2026-09-07 19:59 ` [PATCH v2 5/7] object-name: use hexval brian m. carlson
2026-09-07 19:59 ` [PATCH v2 6/7] t5324: adjust tests for corrupt commit-graph brian m. carlson
2026-09-07 19:59 ` [PATCH v2 7/7] hex: allow only lowercase object IDs in breaking changes mode 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=20260907195941.1024289-4-sandals@crustytoothpaste.net \
--to=sandals@crustytoothpaste.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=phillip.wood123@gmail.com \
/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