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

[PATCH 2/2] check_expirations: don't copy over same element

From
Thomas Rast <trast@student.ethz.ch>
Date
Sep 16, 2011, 11:51 UTC
Message-ID
<29010bf6134beb20efca498e7b4f7a9d9bdb21a6.1316173346.git.trast@student.ethz.ch>
In-Reply-To
<a6397f7f28a5adcd34aeac98cca6500e336698aa.1316173346.git.trast@student.ethz.ch>

The credentials expiry loop looks at a credential, and if it's expired, frees it and memcpy()s the last credential in the now free place.

This results in a memcpy() with source=destination, which technically yields undefined behaviour. Instead of turning it into a memmove, don't copy anything if we deleted the last entry.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---

Valgrind complained. Sorry for not running it earlier when we were discussing the poll issue...

 credential-cache--daemon.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/credential-cache--daemon.c b/credential-cache--daemon.c
index d6769b1..128c5ce 100644
--- a/credential-cache--daemon.c
+++ b/credential-cache--daemon.c
@@ -77,7 +77,8 @@ static int check_expirations(void)
 			free(entries[i].item.unique);
 			free(entries[i].item.username);
 			free(entries[i].item.password);
-			memcpy(&entries[i], &entries[entries_nr], sizeof(*entries));
+			if (i != entries_nr)
+				memcpy(&entries[i], &entries[entries_nr], sizeof(*entries));
 			/*
 			 * Stick around 30 seconds in case a new credential
 			 * shows up (e.g., because we just removed a failed
-- 
1.7.7.rc1.366.ge210a6
Previous: Thomas RastNext: Jeff King
Message 6 of 12 in “credential helper super fun pak”
  1. 0/5 credential helper super fun pakJeff King, Sep 14, 2011
  2. 1/5 docs: minor tweaks to credentials APIJeff King, Sep 14, 2011
  3. 2/5 credential-cache: fix expiration calculation corner casesJeff King, Sep 14, 2011
  4. Thomas RastSep 15, 2011
  5. 1/2 t0300: add missing EOF terminator for <<Thomas Rast, Sep 16, 2011
  6. 2/2 check_expirations: don't copy over same elementThomas Rast, Sep 16, 2011
  7. Jeff KingSep 16, 2011
  8. Junio C HamanoSep 18, 2011
  9. 3/5 t0300: make askpass tests a little more robustJeff King, Sep 14, 2011
  10. 4/5 t0300: make alternate username tests more robustJeff King, Sep 14, 2011
  11. 5/5 credential-store: use a better storage formatJeff King, Sep 14, 2011
  12. Junio C HamanoSep 14, 2011

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.