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

[PATCH v2 2/3] resolve_ref_unsafe(): handle the case of an SHA-1 within loop

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Jun 19, 2013, 06:36 UTC
Message-ID
<1371623788-7227-3-git-send-email-mhagger@alum.mit.edu>
In-Reply-To
<1371623788-7227-1-git-send-email-mhagger@alum.mit.edu>

There is only one "break" statement within the loop, which jumps to the code after the loop that handles the case of a file that holds a SHA-1. So move that code from below the loop into the if statement where the break was previously located. This makes the logic flow more local.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
 refs.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/refs.c b/refs.c
index ab1f99e..867cf9f 100644
--- a/refs.c
+++ b/refs.c
@@ -1300,8 +1300,19 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
 		/*
 		 * Is it a symbolic ref?
 		 */
-		if (prefixcmp(buffer, "ref:"))
-			break;
+		if (prefixcmp(buffer, "ref:")) {
+			/*
+			 * Please note that FETCH_HEAD has a second
+			 * line containing other data.
+			 */
+			if (get_sha1_hex(buffer, sha1) ||
+			    (buffer[40] != '\0' && !isspace(buffer[40]))) {
+				if (flag)
+					*flag |= REF_ISBROKEN;
+				return NULL;
+			}
+			return refname;
+		}
 		if (flag)
 			*flag |= REF_ISSYMREF;
 		buf = buffer + 4;
@@ -1314,13 +1325,6 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
 		}
 		refname = strcpy(refname_buffer, buf);
 	}
-	/* Please note that FETCH_HEAD has a second line containing other data. */
-	if (get_sha1_hex(buffer, sha1) || (buffer[40] != '\0' && !isspace(buffer[40]))) {
-		if (flag)
-			*flag |= REF_ISBROKEN;
-		return NULL;
-	}
-	return refname;
 }
 
 char *resolve_refdup(const char *ref, unsigned char *sha1, int reading, int *flag)
-- 
1.8.3.1
Previous: Michael HaggertyNext: Michael Haggerty
Message 3 of 6 in “Fix a race condition when reading loose refs”
  1. 0/3 Fix a race condition when reading loose refsMichael Haggerty, Jun 19, 2013
  2. 1/3 resolve_ref_unsafe(): extract function handle_missing_loose_ref()Michael Haggerty, Jun 19, 2013
  3. 2/3 resolve_ref_unsafe(): handle the case of an SHA-1 within loopMichael Haggerty, Jun 19, 2013
  4. 3/3 resolve_ref_unsafe(): close race condition reading loose refsMichael Haggerty, Jun 19, 2013
  5. Jeff KingJun 19, 2013
  6. Junio C HamanoJun 19, 2013

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.