Skip to content

Commit 5a4c0a2

Browse files
committed
diff: remove undefined pointer comparison
test-results/t0010-racy-git.out... ------------------------------------------------------------------------ Initialized empty Git repository in /__w/git/git/t/trash directory.t0010-racy-git/.git/ ================================================================= ==7972==ERROR: AddressSanitizer: invalid-pointer-pair: 0x6020000004f0 0x6020000004ef #0 0x7cfcbb in count_trailing_blank diff.c:621 #1 0x7cfe73 in check_blank_at_eof diff.c:637 #2 0x804cb9 in builtin_diff diff.c:3583 #3 0x809494 in run_diff_cmd diff.c:4428 #4 0x80ae96 in run_diff diff.c:4517 #5 0x80ae96 in diff_flush_patch diff.c:5870 git#6 0x80cb6a in diff_flush_patch_all_file_pairs diff.c:6409 #7 0x80cb6a in diff_flush diff.c:6552 git#8 0x7c831f in run_diff_files diff-lib.c:265 git#9 0x4ac215 in cmd_diff_files builtin/diff-files.c:82 git#10 0x41e8c9 in run_builtin git.c:465 git#11 0x41e8c9 in handle_builtin git.c:719 git#12 0x41f9ac in run_argv git.c:786 git#13 0x41f9ac in cmd_main git.c:917 git#14 0x419515 in main common-main.c:56 git#15 0x7f8a83bad55f in __libc_start_call_main (/lib64/libc.so.6+0x2d55f) git#16 0x7f8a83bad60b in __libc_start_main_impl (/lib64/libc.so.6+0x2d60b) git#17 0x41b494 in _start (git+0x41b494) 0x6020000004f0 is located 0 bytes inside of 7-byte region [0x6020000004f0,0x6020000004f7) allocated by thread T0 here: #0 0x7f8a847c291f in __interceptor_malloc (/lib64/libasan.so.6+0xae91f) #1 0xc30972 in do_xmalloc wrapper.c:51 #2 0xc30afd in do_xmallocz wrapper.c:85 #3 0xc30afd in do_xmallocz wrapper.c:75 #4 0xc30afd in xmallocz wrapper.c:93 #5 0x97fbe1 in unpack_loose_rest object-file.c:1312 git#6 0x98d70c in loose_object_info object-file.c:1479 #7 0x98e270 in do_oid_object_info_extended object-file.c:1577 git#8 0x98e9fe in oid_object_info_extended object-file.c:1639 git#9 0x7f3204 in diff_populate_filespec diff.c:4100 git#10 0x7f3ab9 in diff_filespec_is_binary diff.c:3329 git#11 0x805ec6 in builtin_diff diff.c:3507 git#12 0x809494 in run_diff_cmd diff.c:4428 git#13 0x80ae96 in run_diff diff.c:4517 git#14 0x80ae96 in diff_flush_patch diff.c:5870 git#15 0x80cb6a in diff_flush_patch_all_file_pairs diff.c:6409 git#16 0x80cb6a in diff_flush diff.c:6552 git#17 0x7c831f in run_diff_files diff-lib.c:265 git#18 0x4ac215 in cmd_diff_files builtin/diff-files.c:82 git#19 0x41e8c9 in run_builtin git.c:465 git#20 0x41e8c9 in handle_builtin git.c:719 git#21 0x41f9ac in run_argv git.c:786 git#22 0x41f9ac in cmd_main git.c:917 git#23 0x419515 in main common-main.c:56 git#24 0x7f8a83bad55f in __libc_start_call_main (/lib64/libc.so.6+0x2d55f) git#25 0x7f8a83bad60b in __libc_start_main_impl (/lib64/libc.so.6+0x2d60b) git#26 0x41b494 in _start (git+0x41b494) 0x6020000004ef is located 1 bytes to the left of 7-byte region [0x6020000004f0,0x6020000004f7) allocated by thread T0 here: #0 0x7f8a847c291f in __interceptor_malloc (/lib64/libasan.so.6+0xae91f) #1 0xc30972 in do_xmalloc wrapper.c:51 #2 0xc30afd in do_xmallocz wrapper.c:85 #3 0xc30afd in do_xmallocz wrapper.c:75 #4 0xc30afd in xmallocz wrapper.c:93 #5 0x97fbe1 in unpack_loose_rest object-file.c:1312 git#6 0x98d70c in loose_object_info object-file.c:1479 #7 0x98e270 in do_oid_object_info_extended object-file.c:1577 git#8 0x98e9fe in oid_object_info_extended object-file.c:1639 git#9 0x7f3204 in diff_populate_filespec diff.c:4100 git#10 0x7f3ab9 in diff_filespec_is_binary diff.c:3329 git#11 0x805ec6 in builtin_diff diff.c:3507 git#12 0x809494 in run_diff_cmd diff.c:4428 git#13 0x80ae96 in run_diff diff.c:4517 git#14 0x80ae96 in diff_flush_patch diff.c:5870 git#15 0x80cb6a in diff_flush_patch_all_file_pairs diff.c:6409 git#16 0x80cb6a in diff_flush diff.c:6552 git#17 0x7c831f in run_diff_files diff-lib.c:265 git#18 0x4ac215 in cmd_diff_files builtin/diff-files.c:82 git#19 0x41e8c9 in run_builtin git.c:465 git#20 0x41e8c9 in handle_builtin git.c:719 git#21 0x41f9ac in run_argv git.c:786 git#22 0x41f9ac in cmd_main git.c:917 git#23 0x419515 in main common-main.c:56 git#24 0x7f8a83bad55f in __libc_start_call_main (/lib64/libc.so.6+0x2d55f) git#25 0x7f8a83bad60b in __libc_start_main_impl (/lib64/libc.so.6+0x2d60b) git#26 0x41b494 in _start (git+0x41b494) SUMMARY: AddressSanitizer: invalid-pointer-pair diff.c:621 in count_trailing_blank ==7972==ABORTING Signed-off-by: Phillip Wood <[email protected]>
1 parent 27eb5ce commit 5a4c0a2

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

diff.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -606,25 +606,29 @@ static unsigned long diff_filespec_size(struct repository *r,
606606
static int count_trailing_blank(mmfile_t *mf, unsigned ws_rule)
607607
{
608608
char *ptr = mf->ptr;
609-
long size = mf->size;
609+
long i = mf->size;
610610
int cnt = 0;
611611

612-
if (!size)
612+
if (!i)
613613
return cnt;
614-
ptr += size - 1; /* pointing at the very end */
615-
if (*ptr != '\n')
614+
if (ptr[i - 1] != '\n')
616615
; /* incomplete line */
617616
else
618-
ptr--; /* skip the last LF */
619-
while (mf->ptr < ptr) {
620-
char *prev_eol;
621-
for (prev_eol = ptr; mf->ptr <= prev_eol; prev_eol--)
622-
if (*prev_eol == '\n')
617+
i--; /* skip the last LF */
618+
if (!i)
619+
return cnt;
620+
while (1) {
621+
size_t j = i;
622+
623+
for (; i; i--)
624+
if (ptr[i - 1] == '\n')
623625
break;
624-
if (!ws_blank_line(prev_eol + 1, ptr - prev_eol, ws_rule))
626+
if (!ws_blank_line(&ptr[i], j - i, ws_rule))
625627
break;
626628
cnt++;
627-
ptr = prev_eol - 1;
629+
if (i <= 1)
630+
break;
631+
i--;
628632
}
629633
return cnt;
630634
}

0 commit comments

Comments
 (0)