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

[PATCH v2 1/5] trailer: be stricter in parsing separators

From
JTJonathan Tan <jonathantanmy@google.com>
Date
Nov 1, 2016, 20:08 UTC
Message-ID
<c7db0aafb543845382e1835e3704273d3596e6bb.1478028700.git.jonathantanmy@google.com>
In-Reply-To
<cover.1478028700.git.jonathantanmy@google.com>

Currently, a line is interpreted to be a trailer line if it contains a separator. Make parsing stricter by requiring the text on the left of the separator, if not the empty string, to be of the "<token><optional whitespace>" form.

(The find_separator function distinguishes the no-separator case from the separator-starts-line case because some callers of this function need such a distinction.)

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
---
 trailer.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/trailer.c b/trailer.c
index f0ecde2..0ee634f 100644
--- a/trailer.c
+++ b/trailer.c
@@ -563,15 +563,26 @@ static int token_matches_item(const char *tok, struct arg_item *item, int tok_le
 }
 
 /*
- * Return the location of the first separator in line, or -1 if there is no
- * separator.
+ * If the given line is of the form 
+ * "<token><optional whitespace><separator>..." or "<separator>...", return the
+ * location of the separator. Otherwise, return -1.
  */
 static int find_separator(const char *line, const char *separators)
 {
-	int loc = strcspn(line, separators);
-	if (!line[loc])
-		return -1;
-	return loc;
+	int whitespace_found = 0;
+	const char *c;
+	for (c = line; *c; c++) {
+		if (strchr(separators, *c))
+			return c - line;
+		if (!whitespace_found && (isalnum(*c) || *c == '-'))
+			continue;
+		if (c != line && (*c == ' ' || *c == '\t')) {
+			whitespace_found = 1;
+			continue;
+		}
+		break;
+	}
+	return -1;
 }
 
 /*
-- 
2.8.0.rc3.226.g39d4020
Previous: Jonathan TanNext: Junio C Hamano
Message 16 of 30 in “Make other git commands use trailer layout”
  1. 0/4 Make other git commands use trailer layoutJonathan Tan, Oct 29, 2016
  2. 1/4 commit: make ignore_non_trailer take buf/lenJonathan Tan, Oct 29, 2016
  3. 2/4 trailer: avoid unnecessary splitting on linesJonathan Tan, Oct 29, 2016
  4. Christian CouderOct 29, 2016
  5. Junio C HamanoOct 31, 2016
  6. Junio C HamanoOct 31, 2016
  7. 3/4 trailer: have function to describe trailer layoutJonathan Tan, Oct 29, 2016
  8. Junio C HamanoOct 31, 2016
  9. 4/4 sequencer: use trailer's trailer layoutJonathan Tan, Oct 29, 2016
  10. Junio C HamanoNov 1, 2016
  11. Jonathan TanNov 1, 2016
  12. Junio C HamanoNov 1, 2016
  13. Junio C HamanoOct 29, 2016
  14. Christian CouderOct 29, 2016
  15. 0/5 Make other git commands use trailer layoutJonathan Tan, Nov 1, 2016
  16. 1/5 trailer: be stricter in parsing separatorsJonathan Tan, Nov 1, 2016
  17. Junio C HamanoNov 1, 2016
  18. Junio C HamanoNov 1, 2016
  19. Jonathan TanNov 1, 2016
  20. Junio C HamanoNov 1, 2016
  21. 2/5 commit: make ignore_non_trailer take buf/lenJonathan Tan, Nov 1, 2016
  22. 3/5 trailer: avoid unnecessary splitting on linesJonathan Tan, Nov 1, 2016
  23. 5/5 sequencer: use trailer's trailer layoutJonathan Tan, Nov 1, 2016
  24. 4/5 trailer: have function to describe trailer layoutJonathan Tan, Nov 1, 2016
  25. 0/5 Make other git commands use trailer layoutJonathan Tan, Nov 2, 2016
  26. 1/5 trailer: be stricter in parsing separatorsJonathan Tan, Nov 2, 2016
  27. 2/5 commit: make ignore_non_trailer take buf/lenJonathan Tan, Nov 2, 2016
  28. 3/5 trailer: avoid unnecessary splitting on linesJonathan Tan, Nov 2, 2016
  29. 5/5 sequencer: use trailer's trailer layoutJonathan Tan, Nov 2, 2016
  30. 4/5 trailer: have function to describe trailer layoutJonathan Tan, Nov 2, 2016

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.