git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/4] cat_one_file(): make it easy to see that the `size` variable is initialized

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Mar 27, 2025, 12:43 UTC
Message-ID
<b5e98d5e144f4b3a2771a421690b4b729dc1b7ae.1743079429.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1888.git.1743079429.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

The large `switch` statement makes it a bit impractical to reason about the code.

One of the code paths can technically lead to using `size` without being initialized: if the `t` case is taken and the type name is set to the empty string, we would actually leave `size` unintialized right until we use it.

Practically, this cannot happen because the `do_oid_object_info_extended()` function is expected to always populate the `type_name` if asked for. However, it is quite unnecessary to leave the code as unwieldy to reason about: Just initialize the variable to 0 and be done with it.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 builtin/cat-file.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/builtin/cat-file.c b/builtin/cat-file.c
index b13561cf73b..128c901fa8e 100644
--- a/builtin/cat-file.c
+++ b/builtin/cat-file.c
@@ -104,7 +104,7 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
 	struct object_id oid;
 	enum object_type type;
 	char *buf;
-	unsigned long size;
+	unsigned long size = 0;
 	struct object_context obj_context = {0};
 	struct object_info oi = OBJECT_INFO_INIT;
 	struct strbuf sb = STRBUF_INIT;
-- 
gitgitgadget
Previous: Johannes Schindelin via GitGitGadgetNext: Jeff King
Message 2 of 10 in “Initialize a few uninitialized variables”
  1. 0/4 Initialize a few uninitialized variablesJohannes Schindelin via GitGitGadget, Mar 27, 2025
  2. 1/4 cat_one_file(): make it easy to see that the `size` variable is initializedJohannes Schindelin via GitGitGadget, Mar 27, 2025
  3. Jeff KingMar 28, 2025
  4. 2/4 fsck: avoid using an uninitialized variableJohannes Schindelin via GitGitGadget, Mar 27, 2025
  5. Jeff KingMar 28, 2025
  6. 3/4 load_revindex_from_disk(): avoid accessing uninitialized dataJohannes Schindelin via GitGitGadget, Mar 27, 2025
  7. Taylor BlauMar 27, 2025
  8. 4/4 load_pack_mtimes_file(): avoid accessing uninitialized dataJohannes Schindelin via GitGitGadget, Mar 27, 2025
  9. Taylor BlauMar 27, 2025
  10. Johannes SchindelinJul 17, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.