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

[PATCH] Silence error messages unless 'thorough_verify' is set

From
Johan Herland <johan@herland.net>
Date
Jun 9, 2007, 19:42 UTC
Message-ID
<200706092142.05446.johan@herland.net>
In-Reply-To
<200706092028.54459.johan@herland.net>
We don't want to print error message on regular parsing of tag objects.

With this patch error messages are only printed when 'thorough_verify' is set, i.e. when creating new or fscking tag objects.

Cc: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Johan Herland <johan@herland.net>
---
On Saturday 09 June 2007, Johan Herland wrote:
Show 21 quoted lines
> On Saturday 09 June 2007, Junio C Hamano wrote:
> > While I would agree that it makes sense to have the same
> > definition of what is and is not a 100% well formatted tag
> > object for producer side and consumer side, I do not necessarily
> > think it is a good idea to make parse_tag_buffer() chattier on
> > errors.  mktag.c:verify_tag() can afford to be verbose in its
> > diagnosis, because it is used when the user is _creating_ the
> > tag, and it is generally a good idea to be strict when we
> > create.
> > 
> > On the other hand, parse_tag_buffer() is on the side of users
> > who use existing tag objects that were produced by somebody
> > else.  It is generally a good practice to be more lenient when
> > you are consuming.
> > 
> > Also, callers of parse_tag_buffer() know the function is silent
> > on errors (unless there is something seriously wrong with the
> > repository); they do their own error messages when they get an
> > error return.
> 
> Ok. I can make the error messages conditional on 'thorough_verify'.
Is this one ok?
(It goes on top of the patch series as a whole)
...Johan
 tag.c |   34 +++++++++++++++++++---------------
 1 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/tag.c b/tag.c
index af4356e..c3a2855 100644
--- a/tag.c
+++ b/tag.c
@@ -67,6 +67,8 @@ int parse_and_verify_tag_buffer(struct tag *item,
 #define PD_FMT "%td"
 #endif
 
+#define FAIL(...) ( thorough_verify ? error(__VA_ARGS__) : -1 )
+
 	unsigned char sha1[20];
 	char type[20];
 	const char   *type_line, *tag_line, *keywords_line, *tagger_line;
@@ -80,26 +82,26 @@ int parse_and_verify_tag_buffer(struct tag *item,
 	}
 
 	if (size < 65)
-		return error("Tag object failed preliminary size check");
+		return FAIL("Tag object failed preliminary size check");
 
 	/* Verify mandatory object line */
 	if (prefixcmp(data, "object "))
-		return error("Tag object (@ char 0): "
+		return FAIL("Tag object (@ char 0): "
 			"Does not start with \"object \"");
 
 	if (get_sha1_hex(data + 7, sha1))
-		return error("Tag object (@ char 7): Could not get SHA1 hash");
+		return FAIL("Tag object (@ char 7): Could not get SHA1 hash");
 
 	/* Verify mandatory type line */
 	type_line = data + 48;
 	if (prefixcmp(type_line - 1, "\ntype "))
-		return error("Tag object (@ char 47): "
+		return FAIL("Tag object (@ char 47): "
 			"Could not find \"\\ntype \"");
 
 	/* Verify optional tag line */
 	tag_line = strchr(type_line, '\n');
 	if (!tag_line++)
-		return error("Tag object (@ char " PD_FMT "): "
+		return FAIL("Tag object (@ char " PD_FMT "): "
 			"Could not find \"\\n\" after \"type\"",
 			type_line - data);
 	if (prefixcmp(tag_line, "tag ")) /* no tag name given */
@@ -107,7 +109,7 @@ int parse_and_verify_tag_buffer(struct tag *item,
 	else {                           /* tag name given */
 		keywords_line = strchr(tag_line, '\n');
 		if (!keywords_line++)
-			return error("Tag object (@ char " PD_FMT "): "
+			return FAIL("Tag object (@ char " PD_FMT "): "
 				"Could not find \"\\n\" after \"tag\"",
 				tag_line - data);
 	}
@@ -118,7 +120,7 @@ int parse_and_verify_tag_buffer(struct tag *item,
 	else {                                     /* keywords given */
 		tagger_line = strchr(keywords_line, '\n');
 		if (!tagger_line++)
-			return error("Tag object (@ char " PD_FMT "): "
+			return FAIL("Tag object (@ char " PD_FMT "): "
 				"Could not find \"\\n\" after \"keywords\"",
 				keywords_line - data);
 	}
@@ -132,7 +134,7 @@ int parse_and_verify_tag_buffer(struct tag *item,
 	 */
 	if (prefixcmp(tagger_line, "tagger ")) { /* no tagger given */
 		if (thorough_verify)
-			return error("Tag object (@ char " PD_FMT "): "
+			return FAIL("Tag object (@ char " PD_FMT "): "
 				"Could not find \"tagger \"",
 				tagger_line - data);
 		header_end = tagger_line;
@@ -140,7 +142,7 @@ int parse_and_verify_tag_buffer(struct tag *item,
 	else {                                   /* tagger given */
 		header_end = strchr(tagger_line, '\n');
 		if (!header_end++)
-			return error("Tag object (@ char " PD_FMT "): "
+			return FAIL("Tag object (@ char " PD_FMT "): "
 				"Could not find \"\\n\" after \"tagger\"",
 				tagger_line - data);
 	}
@@ -164,7 +166,7 @@ int parse_and_verify_tag_buffer(struct tag *item,
 
 	/* Get the actual type */
 	if (type_len >= sizeof(type))
-		return error("Tag object (@ char " PD_FMT "): "
+		return FAIL("Tag object (@ char " PD_FMT "): "
 			"Type too long", type_line - data);
 	memcpy(type, type_line, type_len);
 	type[type_len] = '\0';
@@ -174,7 +176,7 @@ int parse_and_verify_tag_buffer(struct tag *item,
 
 		/* Verify that the object matches */
 		if (verify_object(sha1, type))
-			return error("Tag object (@ char 7): "
+			return FAIL("Tag object (@ char 7): "
 				"Could not verify tagged object %s",
 				sha1_to_hex(sha1));
 
@@ -184,7 +186,7 @@ int parse_and_verify_tag_buffer(struct tag *item,
 				unsigned char c = tag_line[i];
 				if (c > ' ' && c != 0x7f)
 					continue;
-				return error("Tag object (@ char " PD_FMT "): "
+				return FAIL("Tag object (@ char " PD_FMT "): "
 					"Could not verify tag name",
 					tag_line + i - data);
 			}
@@ -199,12 +201,12 @@ int parse_and_verify_tag_buffer(struct tag *item,
 				unsigned char c = keywords_line[i];
 				if (c == ',' && keywords_line[i + 1] == ',')
 					/* consecutive commas */
-					return error("Tag object (@ char "
+					return FAIL("Tag object (@ char "
 						PD_FMT "): Found empty keyword",
 						keywords_line + i - data);
 				if (c > ' ' && c != 0x7f)
 					continue;
-				return error("Tag object (@ char " PD_FMT "): "
+				return FAIL("Tag object (@ char " PD_FMT "): "
 					"Could not verify keywords",
 					keywords_line + i - data);
 			}
@@ -248,7 +250,7 @@ int parse_and_verify_tag_buffer(struct tag *item,
 		} else if (!strcmp(type, tag_type)) {
 			item->tagged = &lookup_tag(sha1)->object;
 		} else {
-			error("Tag object (@ char " PD_FMT "): "
+			FAIL("Tag object (@ char " PD_FMT "): "
 				"Unknown type '%s'", type_line - data, type);
 			item->tagged = NULL;
 		}
@@ -262,6 +264,8 @@ int parse_and_verify_tag_buffer(struct tag *item,
 
 	return 0;
 
+#undef FAIL
+
 #undef PD_FMT
 }
 
-- 
1.5.2.1.144.gabc40
Previous: Johan HerlandNext: Johannes Schindelin
Message 15 of 90 in “error: char103: premature end of data”
  1. Johannes SchindelinJun 7, 2007
  2. Johan HerlandJun 7, 2007
  3. Johannes SchindelinJun 7, 2007
  4. Johan HerlandJun 7, 2007
  5. Johannes SchindelinJun 7, 2007
  6. Fix failed tag parsing when tag object has no body/message (and thus ends with a single '\n')Johan Herland, Jun 8, 2007
  7. Junio C HamanoJun 8, 2007
  8. Johan HerlandJun 8, 2007
  9. Junio C HamanoJun 8, 2007
  10. 0/21 Refactor the tag object (take 2)Johan Herland, Jun 9, 2007
  11. 01/21 Remove unnecessary code and comments on non-existing 8kB tag object restrictionJohan Herland, Jun 9, 2007
  12. 02/21 Return error messages when parsing fails.Johan Herland, Jun 9, 2007
  13. Junio C HamanoJun 9, 2007
  14. Johan HerlandJun 9, 2007
  15. Silence error messages unless 'thorough_verify' is setJohan Herland, Jun 9, 2007
  16. Johannes SchindelinJun 10, 2007
  17. Junio C HamanoJun 10, 2007
  18. Johannes SchindelinJun 10, 2007
  19. Johan HerlandJun 10, 2007
  20. Johannes SchindelinJun 10, 2007
  21. Johan HerlandJun 10, 2007
  22. 0/4 Restructure the tag objectJohan Herland, Jun 10, 2007
  23. 1/4 Make tag names (i.e. the tag object's "tag" line) optionalJohan Herland, Jun 10, 2007
  24. Junio C HamanoJun 10, 2007
  25. Johan HerlandJun 10, 2007
  26. Junio C HamanoJun 11, 2007
  27. 2/4 Introduce optional "keywords" on tag objectsJohan Herland, Jun 10, 2007
  28. Johannes SchindelinJun 10, 2007
  29. Johan HerlandJun 10, 2007
  30. Junio C HamanoJun 10, 2007
  31. Johan HerlandJun 10, 2007
  32. Junio C HamanoJun 11, 2007
  33. 3/4 Documentation/git-mktag: Document the changes in tag object structureJohan Herland, Jun 10, 2007
  34. 4/4 git-mktag tests: Expand on mktag selftests according to the new tag object structureJohan Herland, Jun 10, 2007
  35. Johannes SchindelinJun 10, 2007
  36. 03/21 Refactoring to make verify_tag() and parse_tag_buffer() more similarJohan Herland, Jun 9, 2007
  37. Johannes SchindelinJun 9, 2007
  38. Johan HerlandJun 9, 2007
  39. 04/21 Refactor verification of "tagger" line to be more similar to verification of "type" and "tagger" linesJohan Herland, Jun 9, 2007
  40. Junio C HamanoJun 9, 2007
  41. Johannes SchindelinJun 10, 2007
  42. 05/21 Make parse_tag_buffer_internal() handle item == NULLJohan Herland, Jun 9, 2007
  43. Junio C HamanoJun 9, 2007
  44. Move check for already parsed tag object to parse_tag_buffer() wrapper functionJohan Herland, Jun 10, 2007
  45. Johannes SchindelinJun 10, 2007
  46. 06/21 Refactor tag name verification loop to use index 'i' instead of incrementing pointer 'tag_line'Johan Herland, Jun 9, 2007
  47. Alex RiesenJun 9, 2007
  48. Johan HerlandJun 9, 2007
  49. Johannes SchindelinJun 10, 2007
  50. Johannes SchindelinJun 10, 2007
  51. 07/21 Copy the remaining differences from verify_tag() to parse_tag_buffer_internal()Johan Herland, Jun 9, 2007
  52. Alex RiesenJun 9, 2007
  53. Johan HerlandJun 9, 2007
  54. Johannes SchindelinJun 10, 2007
  55. 08/21 Switch from verify_tag() to parse_and_verify_tag_buffer() for verifying tag objects in git-mktagJohan Herland, Jun 9, 2007
  56. 09/21 Remove unneeded code from mktag.cJohan Herland, Jun 9, 2007
  57. Alex RiesenJun 9, 2007
  58. Johan HerlandJun 9, 2007
  59. 10/21 Free mktag's buffer before dyingJohan Herland, Jun 9, 2007
  60. Alex RiesenJun 9, 2007
  61. Johan HerlandJun 9, 2007
  62. Alex RiesenJun 9, 2007
  63. Johan HerlandJun 9, 2007
  64. Johannes SchindelinJun 10, 2007
  65. 11/21 Rewrite error messages; fix up line lengthsJohan Herland, Jun 9, 2007
  66. Johannes SchindelinJun 10, 2007
  67. 12/21 Use prefixcmp() instead of memcmp() for cleaner code with less magic numbersJohan Herland, Jun 9, 2007
  68. Alex RiesenJun 9, 2007
  69. Johan HerlandJun 9, 2007
  70. Johannes SchindelinJun 10, 2007
  71. 13/21 Collect skipping of header field names and calculation of line lengths in one placeJohan Herland, Jun 9, 2007
  72. Johannes SchindelinJun 10, 2007
  73. 14/21 Add proper parsing of "tagger" line, but only when thorough_verify is setJohan Herland, Jun 9, 2007
  74. Johannes SchindelinJun 10, 2007
  75. Johannes SchindelinJun 10, 2007
  76. 15/21 Make tag names (i.e. the tag object's "tag" line) optionalJohan Herland, Jun 9, 2007
  77. Johannes SchindelinJun 10, 2007
  78. 16/21 Introduce optional "keywords" on tag objectsJohan Herland, Jun 9, 2007
  79. Alex RiesenJun 9, 2007
  80. Johan HerlandJun 9, 2007
  81. Use xstrndup() instead of xmalloc() and memcpy(); fix buglet with generating default item->keywords.Johan Herland, Jun 9, 2007
  82. Junio C HamanoJun 10, 2007
  83. Fail if tag name and keywords is not within "printable ASCII"Johan Herland, Jun 10, 2007
  84. Junio C HamanoJun 10, 2007
  85. 17/21 Update comments on tag objects in mktag.cJohan Herland, Jun 9, 2007
  86. 18/21 git-fsck: Do thorough verification of tag objectsJohan Herland, Jun 9, 2007
  87. 19/21 Documentation/git-mktag: Document the changes in tag object structureJohan Herland, Jun 9, 2007
  88. 20/21 git-mktag tests: Expand on mktag selftests according to the new tag object structureJohan Herland, Jun 9, 2007
  89. 21/21 Add fsck_verify_ref_to_tag_object() to verify that refname matches name stored in tag objectJohan Herland, Jun 9, 2007
  90. Johannes SchindelinJun 7, 2007

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.