From 6d17dc1dd3909a9e8a5a915a6ff15d4c64c58290 Mon Sep 17 00:00:00 2001 From: David Turner Date: Sat, 5 Jul 2014 12:00:59 -0700 Subject: [PATCH 1/2] refs.c: handle REFNAME_REFSPEC_PATTERN at end of page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When a ref crosses a memory page boundary, we restart the parsing at the beginning with the bytewise code. Pass the original flags to that code, rather than the current flags. Reported-By: Øyvind A. Holm Signed-off-by: David Turner Signed-off-by: Junio C Hamano --- refs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/refs.c b/refs.c index 25117fe0cd..39871977ed 100644 --- a/refs.c +++ b/refs.c @@ -153,6 +153,7 @@ int check_refname_format(const char *refname, int flags) const __m128i tilde_lb = _mm_set1_epi8('~' - 1); int component_count = 0; + int orig_flags = flags; if (refname[0] == 0 || refname[0] == '/') { /* entirely empty ref or initial ref component */ @@ -178,7 +179,7 @@ int check_refname_format(const char *refname, int flags) * End-of-page; fall back to slow method for * this entire ref. */ - return check_refname_format_bytewise(refname, flags); + return check_refname_format_bytewise(refname, orig_flags); tmp = _mm_loadu_si128((__m128i *)cp); tmp1 = _mm_loadu_si128((__m128i *)(cp + 1)); From a8d9fea772ca49c23ca3ee3d7625b9d1ed94f87f Mon Sep 17 00:00:00 2001 From: David Turner Date: Fri, 4 Jul 2014 13:24:01 -0700 Subject: [PATCH 2/2] refs: fix valgrind suppression file Add all of the ways in which check_refname_format violates valgrind's expectations to the valgrind suppression file; remove an assumption about the call chain of check_refname_format from same. Signed-off-by: David Turner Signed-off-by: Junio C Hamano --- t/valgrind/default.supp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/t/valgrind/default.supp b/t/valgrind/default.supp index 332ab1a3b3..9d51c92b74 100644 --- a/t/valgrind/default.supp +++ b/t/valgrind/default.supp @@ -50,10 +50,17 @@ fun:copy_ref } { - ignore-sse-check_refname_format + ignore-sse-check_refname_format-addr Memcheck:Addr8 fun:check_refname_format - fun:cmd_check_ref_format - fun:handle_builtin - fun:main +} +{ + ignore-sse-check_refname_format-cond + Memcheck:Cond + fun:check_refname_format +} +{ + ignore-sse-check_refname_format-value + Memcheck:Value8 + fun:check_refname_format }