{"thread":{"id":"4248","subject":"git-diff-tree crashes on ubuntu kernel git repository","startedAt":"2006-05-22T23:09:43Z","lastAt":"2006-05-23T19:06:44Z","messageCount":5,"participants":["Torgil Svensson","Sean","Junio C Hamano","Dmitry V. Levin"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"20489","messageId":"e7bda7770605221609h7c18c2ccpe92db34050d46f9f@mail.gmail.com","threadId":"4248","inReplyTo":null,"subject":"git-diff-tree crashes on ubuntu kernel git repository","fromName":"Torgil Svensson","fromEmail":"torgil.svensson@gmail.com","sentAt":"2006-05-22T23:09:43Z","receivedAt":"2006-05-22T23:09:43Z","isPatch":false,"sender":{"key":"torgil.svensson@gmail.com","avatar":null},"body":"Hi\n\nIt seems like git-diff-tree has some problems with moved files:\n\n$ git-diff-tree -p --stat --summary -M\n348f179e3195448cea49c98a79cce8c7f446ce26\n343ca16424ba031b37e4df49afddaee098a8f347 | wc -l\n*** glibc detected *** free(): invalid pointer: 0x12ecbbf0 ***\n6101\n\nAs can be seen below there is some obvious error in the output just\nprior to the crash:\n drivers/w1/{masters => }/ds_w1_bridge.c            |   38\n\nThis file is moved into \"w1/masters\" by commit\nbd529cfb40c427d5b5aae0d315afb9f0a1da5e76\n\n$ git --version\ngit version 1.3.3.g5e36\n\n$ cat .git/remotes/origin\nURL: git://git.kernel.org/pub/scm/linux/kernel/git/bcollins/ubuntu-2.6\nPull: refs/heads/master:refs/heads/origin\n\n $ gdb git-diff-tree\n(gdb) run -p --stat --summary -M\n348f179e3195448cea49c98a79cce8c7f446ce26\n343ca16424ba031b37e4df49afddaee098a8f347\n\n<...lots of files...>\n\n drivers/video/w100fb.c                             |  162\n drivers/video/w100fb.h                             |  748 -\n drivers/w1/Kconfig                                 |   62\n drivers/w1/Makefile                                |   10\n drivers/w1/{masters => }/ds_w1_bridge.c            |   38\n*** glibc detected *** free(): invalid pointer: 0x12ecbbf0 ***\n\nProgram received signal SIGABRT, Aborted.\n0xffffe410 in __kernel_vsyscall ()\n(gdb) bt\n#0  0xffffe410 in __kernel_vsyscall ()\n#1  0xb7d7e9a1 in raise () from /lib/tls/i686/cmov/libc.so.6\n#2  0xb7d802b9 in abort () from /lib/tls/i686/cmov/libc.so.6\n#3  0xb7db287a in __fsetlocking () from /lib/tls/i686/cmov/libc.so.6\n#4  0xb7db8fd4 in malloc_usable_size () from /lib/tls/i686/cmov/libc.so.6\n#5  0xb7db934a in free () from /lib/tls/i686/cmov/libc.so.6\n#6  0x08056902 in show_stats (data=0x8deff80) at diff.c:392\n#7  0x08058466 in diff_flush (options=0x80686b0) at diff.c:1999\n#8  0x0805b143 in log_tree_diff_flush (opt=0x8068680) at log-tree.c:82\n#9  0x08049d11 in main (argc=0, argv=0xbfcf8a14) at diff-tree.c:130\n(gdb)\n\nAs shown above I can easily recreate the crash if you want more info.\nThank you for a wonderful tool.\n\n//Torgil\n"},{"id":"20500","messageId":"BAYC1-PASMTP115C9137E5BDABD705881BAE9B0@CEZ.ICE","threadId":"4248","inReplyTo":"e7bda7770605221609h7c18c2ccpe92db34050d46f9f@mail.gmail.com","subject":"[PATCH] Avoid segfault in diff --stat rename output.","fromName":"Sean","fromEmail":"seanlkml@sympatico.ca","sentAt":"2006-05-23T00:36:34Z","receivedAt":"2006-05-23T00:36:34Z","isPatch":true,"sender":{"key":"seanlkml@sympatico.ca","avatar":"https://gravatar.com/avatar/f92923f54fc08c401fc59b71829d4b89e9b8087fbba45ff87c82e6a83aee02ae?d=mp&s=160"},"body":"\nSigned-off-by: Sean Estabrooks <seanlkml@sympatico.ca>\n---\n diff.c |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\nOn Tue, 23 May 2006 01:09:43 +0200\n\"Torgil Svensson\" <torgil.svensson@gmail.com> wrote:\n\n> Hi\n> \n> It seems like git-diff-tree has some problems with moved files:\n> \n> $ git-diff-tree -p --stat --summary -M\n> 348f179e3195448cea49c98a79cce8c7f446ce26\n> 343ca16424ba031b37e4df49afddaee098a8f347 | wc -l\n> *** glibc detected *** free(): invalid pointer: 0x12ecbbf0 ***\n> 6101\n\n\ndiff --git a/diff.c b/diff.c\nindex 7f35e59..a7bb9b9 100644\n--- a/diff.c\n+++ b/diff.c\n@@ -237,7 +237,7 @@ static char *pprint_rename(const char *a\n \t\tif (a_midlen < 0) a_midlen = 0;\n \t\tif (b_midlen < 0) b_midlen = 0;\n \n-\t\tname = xmalloc(len_a + len_b - pfx_length - sfx_length + 7);\n+\t\tname = xmalloc(pfx_length + a_midlen + b_midlen + sfx_length + 7);\n \t\tsprintf(name, \"%.*s{%.*s => %.*s}%s\",\n \t\t\tpfx_length, a,\n \t\t\ta_midlen, a + pfx_length,\n-- \n1.3.GIT\n"},{"id":"20501","messageId":"7vzmh98seo.fsf@assigned-by-dhcp.cox.net","threadId":"4248","inReplyTo":"BAYC1-PASMTP115C9137E5BDABD705881BAE9B0@CEZ.ICE","subject":"Re: [PATCH] Avoid segfault in diff --stat rename output.","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2006-05-23T01:02:39Z","receivedAt":"2006-05-23T01:02:39Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Sean <seanlkml@sympatico.ca> writes:\n\n> Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>\n> ---\n>  diff.c |    2 +-\n>  1 files changed, 1 insertions(+), 1 deletions(-)\n>\n> diff --git a/diff.c b/diff.c\n> index 7f35e59..a7bb9b9 100644\n> --- a/diff.c\n> +++ b/diff.c\n> @@ -237,7 +237,7 @@ static char *pprint_rename(const char *a\n>  \t\tif (a_midlen < 0) a_midlen = 0;\n>  \t\tif (b_midlen < 0) b_midlen = 0;\n>  \n> -\t\tname = xmalloc(len_a + len_b - pfx_length - sfx_length + 7);\n> +\t\tname = xmalloc(pfx_length + a_midlen + b_midlen + sfx_length + 7);\n>  \t\tsprintf(name, \"%.*s{%.*s => %.*s}%s\",\n\nObviously correct given what the sprintf() that immediately\nfollows does.  Sheesh, what was I smoking back then.  *BLUSH*\n\nThanks.\n"},{"id":"20533","messageId":"20060523112854.GD5582@basalt.office.altlinux.org","threadId":"4248","inReplyTo":"7vzmh98seo.fsf@assigned-by-dhcp.cox.net","subject":"Q: xasprintf","fromName":"Dmitry V. Levin","fromEmail":"ldv@altlinux.org","sentAt":"2006-05-23T11:28:54Z","receivedAt":"2006-05-23T11:28:54Z","isPatch":false,"sender":{"key":"ldv@altlinux.org","avatar":"https://avatars.githubusercontent.com/u/5281408?v=4"},"body":"Hi,\n\nOn Mon, May 22, 2006 at 06:02:39PM -0700, Junio C Hamano wrote:\n> Sean <seanlkml@sympatico.ca> writes:\n[...]\n> > -\t\tname = xmalloc(len_a + len_b - pfx_length - sfx_length + 7);\n> > +\t\tname = xmalloc(pfx_length + a_midlen + b_midlen + sfx_length + 7);\n> >  \t\tsprintf(name, \"%.*s{%.*s => %.*s}%s\",\n> \n> Obviously correct given what the sprintf() that immediately\n> follows does.  Sheesh, what was I smoking back then.  *BLUSH*\n\nWhat about introducing xasprintf() to eliminate such issues?\n\n\n-- \nldv\n"},{"id":"20564","messageId":"e7bda7770605231206t651d4b22xb30c07ad95cfcb39@mail.gmail.com","threadId":"4248","inReplyTo":"BAYC1-PASMTP115C9137E5BDABD705881BAE9B0@CEZ.ICE","subject":"Re: [PATCH] Avoid segfault in diff --stat rename output.","fromName":"Torgil Svensson","fromEmail":"torgil.svensson@gmail.com","sentAt":"2006-05-23T19:06:44Z","receivedAt":"2006-05-23T19:06:44Z","isPatch":true,"sender":{"key":"torgil.svensson@gmail.com","avatar":null},"body":"This patch fixed the issue for me.\n\nOn 5/23/06, Sean <seanlkml@sympatico.ca> wrote:\n>\n> Signed-off-by: Sean Estabrooks <seanlkml@sympatico.ca>\n> ---\n>  diff.c |    2 +-\n>  1 files changed, 1 insertions(+), 1 deletions(-)\n>\n> On Tue, 23 May 2006 01:09:43 +0200\n> \"Torgil Svensson\" <torgil.svensson@gmail.com> wrote:\n>\n> > Hi\n> >\n> > It seems like git-diff-tree has some problems with moved files:\n> >\n> > $ git-diff-tree -p --stat --summary -M\n> > 348f179e3195448cea49c98a79cce8c7f446ce26\n> > 343ca16424ba031b37e4df49afddaee098a8f347 | wc -l\n> > *** glibc detected *** free(): invalid pointer: 0x12ecbbf0 ***\n> > 6101\n>\n>\n> diff --git a/diff.c b/diff.c\n> index 7f35e59..a7bb9b9 100644\n> --- a/diff.c\n> +++ b/diff.c\n> @@ -237,7 +237,7 @@ static char *pprint_rename(const char *a\n>                 if (a_midlen < 0) a_midlen = 0;\n>                 if (b_midlen < 0) b_midlen = 0;\n>\n> -               name = xmalloc(len_a + len_b - pfx_length - sfx_length + 7);\n> +               name = xmalloc(pfx_length + a_midlen + b_midlen + sfx_length + 7);\n>                 sprintf(name, \"%.*s{%.*s => %.*s}%s\",\n>                         pfx_length, a,\n>                         a_midlen, a + pfx_length,\n> --\n> 1.3.GIT\n>\n>\n"}]}