summaryrefslogtreecommitdiff
path: root/src/refs.c
diff options
context:
space:
mode:
authorVicent Marti <tanoku@gmail.com>2011-02-02 06:16:50 +0200
committerVicent Marti <tanoku@gmail.com>2011-02-02 06:16:50 +0200
commitddc9e79ae2acf6afa9262909649b2984e1b3ff1a (patch)
treeecf03a8fd74581b82e02ac922da040b37ce624f4 /src/refs.c
parentff5873ad950ca2de9f4680e01ee7c8cb258f9874 (diff)
downloadlibgit2-ddc9e79ae2acf6afa9262909649b2984e1b3ff1a.tar.gz
Fix more issues with Win32 EOL
Signed-off-by: Vicent Marti <tanoku@gmail.com>
Diffstat (limited to 'src/refs.c')
-rw-r--r--src/refs.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/refs.c b/src/refs.c
index 40c47f286..eca50ddaa 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -95,7 +95,7 @@ int git_reference_new(git_reference **ref_out, git_repository *repo)
static int parse_sym_ref(git_reference *ref, gitfo_buf *file_content)
{
- const int header_len = strlen(GIT_SYMREF);
+ const unsigned int header_len = strlen(GIT_SYMREF);
const char *refname_start;
char *eol;
@@ -318,10 +318,6 @@ static int parse_packed_line(
goto cleanup;
}
- /* windows line feeds */
- if (refname_end[-1] == '\r')
- refname_end--;
-
refname_len = refname_end - refname_begin;
ref->name = git__malloc(refname_len + 1);
@@ -333,6 +329,9 @@ static int parse_packed_line(
memcpy(ref->name, refname_begin, refname_len);
ref->name[refname_len] = 0;
+ if (ref->name[refname_len - 1] == '\r')
+ ref->name[refname_len - 1] = 0;
+
ref->type = GIT_REF_OID;
ref->packed = 1;
@@ -368,6 +367,14 @@ static int parse_packed_refs(git_refcache *ref_cache, git_repository *repo)
/* Let's skip the header */
buffer_start += strlen(GIT_PACKEDREFS_HEADER);
+ if (*buffer_start == '\r')
+ buffer_start++;
+
+ if (*buffer_start != '\n')
+ return GIT_EPACKEDREFSCORRUPTED;
+
+ buffer_start++;
+
while (buffer_start < buffer_end) {
git_reference *ref = NULL;