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

[PATCH 1/5] convert: Safer handling of $Id$ contraction.

From
Henrik Grubbström (Grubba) <grubba@grubba.org>
Date
Mar 29, 2010, 11:28 UTC
Message-ID
<a75a46b1b6fdb9d52f608643676512e87474e16d.1269860022.git.grubba@grubba.org>
In-Reply-To
<cover.1269860022.git.grubba@grubba.org>

The code to contract $Id:xxxxx$ strings could eat an arbitrary amount of source text if the terminating $ was lost. It now refuses to contract $Id:xxxxx$ strings spanning multiple lines.

Signed-off-by: Henrik Grubbström <grubba@grubba.org>
---
The behaviour implemented by the patch is in line with what other
VCSes that implement $Id$ do.

Fixes quoting portability issue remarked on by Bert Wesarg <bert.wesarg@googlemail.com>. Implemented some optimizations suggested by René Scharfe <rene.scharfe@lsrfire.ath.cx>.

 convert.c             |   12 ++++++++++++
 t/t0021-conversion.sh |   16 ++++++++++------
 2 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/convert.c b/convert.c
index 4f8fcb7..239fa0a 100644
--- a/convert.c
+++ b/convert.c
@@ -425,6 +425,8 @@ static int count_ident(const char *cp, unsigned long size)
 				cnt++;
 				break;
 			}
+			if (ch == '\n')
+				break;
 		}
 	}
 	return cnt;
@@ -455,6 +457,11 @@ static int ident_to_git(const char *path, const char *src, size_t len,
 			dollar = memchr(src + 3, '$', len - 3);
 			if (!dollar)
 				break;
+			if (memchr(src + 3, '\n', dollar - src - 3)) {
+				/* Line break before the next dollar. */
+				continue;
+			}
+
 			memcpy(dst, "Id$", 3);
 			dst += 3;
 			len -= dollar + 1 - src;
@@ -514,6 +521,11 @@ static int ident_to_worktree(const char *path, const char *src, size_t len,
 				break;
 			}
 
+			if (memchr(src + 3, '\n', dollar - src - 3)) {
+				/* Line break before the next dollar. */
+				continue;
+			}
+
 			len -= dollar + 1 - src;
 			src  = dollar + 1;
 		} else {
diff --git a/t/t0021-conversion.sh b/t/t0021-conversion.sh
index 6cb8d60..29438c5 100755
--- a/t/t0021-conversion.sh
+++ b/t/t0021-conversion.sh
@@ -65,17 +65,21 @@ test_expect_success expanded_in_repo '
 		echo "\$Id:NoSpaceAtFront \$"
 		echo "\$Id:NoSpaceAtEitherEnd\$"
 		echo "\$Id: NoTerminatingSymbol"
+		echo "\$Id: Foreign Commit With Spaces \$"
+		echo "\$Id: NoTerminatingSymbolAtEOF"
 	} > expanded-keywords &&
 
 	{
 		echo "File with expanded keywords"
-		echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$"
-		echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$"
-		echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$"
-		echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$"
-		echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$"
-		echo "\$Id: 4f21723e7b15065df7de95bd46c8ba6fb1818f4c \$"
+		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
+		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
+		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
+		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
+		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
+		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
 		echo "\$Id: NoTerminatingSymbol"
+		echo "\$Id: fd0478f5f1486f3d5177d4c3f6eb2765e8fc56b9 \$"
+		echo "\$Id: NoTerminatingSymbolAtEOF"
 	} > expected-output &&
 
 	git add expanded-keywords &&
-- 
1.6.4.122.g6ffd7
Previous: Henrik Grubbström (Grubba)Next: Henrik Grubbström (Grubba)
Message 2 of 14 in “ident attribute related patches (resend w/ testsuite v3)”
  1. 0/5 ident attribute related patches (resend w/ testsuite v3)Henrik Grubbström (Grubba), Mar 29, 2010
  2. 1/5 convert: Safer handling of $Id$ contraction.Henrik Grubbström (Grubba), Mar 29, 2010
  3. 2/5 convert: Keep foreign $Id$ on checkout.Henrik Grubbström (Grubba), Mar 29, 2010
  4. 3/5 convert: Use the enum constant SAFE_CRLF_FALSE.Henrik Grubbström (Grubba), Mar 29, 2010
  5. 4/5 convert: Inhibit contraction of foreign $Id$ during stats.Henrik Grubbström (Grubba), Mar 29, 2010
  6. 5/5 convert: Added core.refilteronadd feature.Henrik Grubbström (Grubba), Mar 29, 2010
  7. Stephen R. van den BergMar 29, 2010
  8. Stephen R. van den BergMar 29, 2010
  9. Junio C HamanoApr 1, 2010
  10. Henrik GrubbströmApr 6, 2010
  11. Stephen R. van den BergMar 29, 2010
  12. Junio C HamanoApr 1, 2010
  13. Stephen R. van den BergMar 29, 2010
  14. Stephen R. van den BergMar 29, 2010

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.