summaryrefslogtreecommitdiff
path: root/compat/win32mmap.c
diff options
context:
space:
mode:
authorLibravatar Jim Meyering <jim@meyering.net>2010-10-11 17:41:16 +0200
committerLibravatar Junio C Hamano <gitster@pobox.com>2010-10-13 19:11:26 -0700
commitd8d2eb7d6b5e48c2bcb0e71a770f8a05375ac03e (patch)
tree41e06111449b6afdc469084cff90448acf142307 /compat/win32mmap.c
parentt/t3415: use && where applicable. (diff)
downloadtgif-d8d2eb7d6b5e48c2bcb0e71a770f8a05375ac03e.tar.xz
mailmap: fix use of freed memory
On an x86_64 system (F13-based), I ran these commands in an empty directory: git init printf '%s\n' \ '<jdoe@example.com> <jdoe@example.COM>' \ 'John <jdoe@example.com>' > .mailmap git shortlog < /dev/null Here's the result: (reading log message from standard input) *** glibc detected *** git: free(): invalid pointer: 0x0000000000f53730 *** ======= Backtrace: ========= /lib64/libc.so.6[0x31ba875676] git[0x48c2a5] git[0x4b9858] ... zsh: abort (core dumped) git shortlog What happened? Some .mailmap entry is of the <email1> <email2> form, while a subsequent one looks like "User Name <Email2>, and the two email addresses on the right are not identical but are "equal" when using a case-insensitive comparator. Then, when add_mapping is processing the latter line, new_email is NULL and we free me->email, yet do not replace it with a new strdup'd string. Thus, when later we attempt to use the buffer behind that ->email pointer, we reference freed memory. The solution is to free ->email and ->name only if we're about to replace them. [jc: squashed in the tests from Jonathan] Signed-off-by: Jim Meyering <meyering@redhat.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat/win32mmap.c')
0 files changed, 0 insertions, 0 deletions