OSDN Git Service

refs.c: handle REFNAME_REFSPEC_PATTERN at end of page
authorDavid Turner <dturner@twopensource.com>
Sat, 5 Jul 2014 19:00:59 +0000 (12:00 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 7 Jul 2014 18:05:43 +0000 (11:05 -0700)
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 <sunny@sunbase.org>
Signed-off-by: David Turner <dturner@twitter.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c

diff --git a/refs.c b/refs.c
index 25117fe..3987197 100644 (file)
--- 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));