diff options
author | Patrick Steinhardt <ps@pks.im> | 2019-04-16 12:36:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-16 12:36:24 +0200 |
commit | ed959ca2f158862a59584cbfa0d39a845419f514 (patch) | |
tree | 6e4cc1c6fc2b8a627e96595966b701e9a418fc70 | |
parent | d1cfd79a477a440c5f0929c34e817da202227ec7 (diff) | |
parent | 30c06b601eaf9b87975a3731ad1051d74b1ae73d (diff) | |
download | libgit2-ed959ca2f158862a59584cbfa0d39a845419f514.tar.gz |
Merge pull request #5027 from ddevault/master
patch_parse.c: Handle CRLF in parse_header_start
-rw-r--r-- | src/patch_parse.c | 3 | ||||
-rw-r--r-- | tests/diff/parse.c | 19 | ||||
-rw-r--r-- | tests/patch/patch_common.h | 9 |
3 files changed, 30 insertions, 1 deletions
diff --git a/src/patch_parse.c b/src/patch_parse.c index 545f1ca9e..d7311157f 100644 --- a/src/patch_parse.c +++ b/src/patch_parse.c @@ -328,7 +328,8 @@ static int parse_header_start(git_patch_parsed *patch, git_patch_parse_ctx *ctx) * proceeed here. We then hope for the "---" and "+++" lines to fix that * for us. */ - if (!git_parse_ctx_contains(&ctx->parse_ctx, "\n", 1)) { + if (!git_parse_ctx_contains(&ctx->parse_ctx, "\n", 1) && + !git_parse_ctx_contains(&ctx->parse_ctx, "\r\n", 2)) { git_parse_advance_chars(&ctx->parse_ctx, ctx->parse_ctx.line_len - 1); git__free(patch->header_old_path); diff --git a/tests/diff/parse.c b/tests/diff/parse.c index 7cc468245..a067861de 100644 --- a/tests/diff/parse.c +++ b/tests/diff/parse.c @@ -360,6 +360,7 @@ void test_diff_parse__lineinfo(void) git_diff_free(diff); } + void test_diff_parse__new_file_with_space(void) { const char *content = PATCH_ORIGINAL_NEW_FILE_WITH_SPACE; @@ -377,3 +378,21 @@ void test_diff_parse__new_file_with_space(void) git_patch_free(patch); git_diff_free(diff); } + +void test_diff_parse__crlf(void) +{ + const char *text = PATCH_CRLF; + git_diff *diff; + git_patch *patch; + const git_diff_delta *delta; + + cl_git_pass(git_diff_from_buffer(&diff, text, strlen(text))); + cl_git_pass(git_patch_from_diff(&patch, diff, 0)); + delta = git_patch_get_delta(patch); + + cl_assert_equal_s(delta->old_file.path, "test-file"); + cl_assert_equal_s(delta->new_file.path, "test-file"); + + git_patch_free(patch); + git_diff_free(diff); +} diff --git a/tests/patch/patch_common.h b/tests/patch/patch_common.h index 75aab4453..291ece9eb 100644 --- a/tests/patch/patch_common.h +++ b/tests/patch/patch_common.h @@ -850,3 +850,12 @@ "+++ b/sp ace.txt\n" \ "@@ -0,0 +1 @@\n" \ "+a\n" + +#define PATCH_CRLF \ + "diff --git a/test-file b/test-file\r\n" \ + "new file mode 100644\r\n" \ + "index 0000000..af431f2 100644\r\n" \ + "--- /dev/null\r\n" \ + "+++ b/test-file\r\n" \ + "@@ -0,0 +1 @@\r\n" \ + "+a contents\r\n" |