##// END OF EJS Templates
fix(annotation): fixed annotation logic bug that could cause exceptions for files with mixed newlines for git. Fixes RCCE-59
super-admin -
r1216:72621ce1 default
parent child Browse files
Show More
@@ -40,7 +40,7 b' from dulwich.repo import Repo as Dulwich'
40 40
41 41 import rhodecode
42 42 from vcsserver import exceptions, settings, subprocessio
43 from vcsserver.str_utils import safe_str, safe_int, safe_bytes, ascii_bytes, convert_to_str
43 from vcsserver.str_utils import safe_str, safe_int, safe_bytes, ascii_bytes, convert_to_str, splitnewlines
44 44 from vcsserver.base import RepoFactory, obfuscate_qs, ArchiveNode, store_archive_in_cache, BytesEnvelope, BinaryEnvelope
45 45 from vcsserver.hgcompat import (
46 46 hg_url as url_parser, httpbasicauthhandler, httpdigestauthhandler)
@@ -1347,7 +1347,8 b' class GitRemote(RemoteBase):'
1347 1347 with repo_init as repo:
1348 1348 commit = repo[commit_id]
1349 1349 blame_obj = repo.blame(path, newest_commit=commit_id)
1350 for i, line in enumerate(commit.tree[path].data.splitlines()):
1350 file_content = commit.tree[path].data
1351 for i, line in enumerate(splitnewlines(file_content)):
1351 1352 line_no = i + 1
1352 1353 hunk = blame_obj.for_line(line_no)
1353 1354 blame_commit_id = hunk.final_commit_id.hex
@@ -142,3 +142,17 b' def convert_to_str(data):'
142 142 return list(convert_to_str(item) for item in data)
143 143 else:
144 144 return data
145
146
147 def splitnewlines(text: bytes):
148 """
149 like splitlines, but only split on newlines.
150 """
151
152 lines = [_l + b'\n' for _l in text.split(b'\n')]
153 if lines:
154 if lines[-1] == b'\n':
155 lines.pop()
156 else:
157 lines[-1] = lines[-1][:-1]
158 return lines
General Comments 0
You need to be logged in to leave comments. Login now