summaryrefslogtreecommitdiff
path: root/line-log.c
diff options
context:
space:
mode:
authorIsabella Stephens <istephens@atlassian.com>2018-06-15 16:29:28 +1000
committerJunio C Hamano <gitster@pobox.com>2018-06-15 10:29:14 -0700
commit7f81c00f3b1bd45c2954b18550b8e351651f72f3 (patch)
treeca5a971b2a150d15d20dcd14fee9346db6abee0a /line-log.c
parent96cfa94e68cfbe9942e230ae18b35eaf1ca30f99 (diff)
downloadgit-7f81c00f3b1bd45c2954b18550b8e351651f72f3.tar.gz
log: prevent error if line range ends past end of file
If the -L option is used to specify a line range in git log, and the end of the range is past the end of the file, git will fail with a fatal error. This commit prevents such behaviour - instead we perform the log for existing lines within the specified range. This commit also fixes a corner case where -L ,-n:file would be treated as a log over the whole file. Now we treat this as -L 1,-n:file and blame the first line of the file instead. Signed-off-by: Isabella Stephens <istephens@atlassian.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'line-log.c')
-rw-r--r--line-log.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/line-log.c b/line-log.c
index cdc2257db5..8ad074e58d 100644
--- a/line-log.c
+++ b/line-log.c
@@ -599,11 +599,11 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args)
lines, anchor, &begin, &end,
full_name))
die("malformed -L argument '%s'", range_part);
- if (lines < end || ((lines || begin) && lines < begin))
+ if ((!lines && (begin || end)) || lines < begin)
die("file %s has only %lu lines", name_part, lines);
if (begin < 1)
begin = 1;
- if (end < 1)
+ if (end < 1 || lines < end)
end = lines;
begin--;
line_log_data_insert(&ranges, full_name, begin, end);