{"thread":{"id":"8241","subject":"[PATCH] branch: fix segfault when resolving an invalid HEAD","startedAt":"2007-05-20T12:19:17Z","lastAt":"2007-05-20T12:44:47Z","messageCount":2,"participants":["Jonas Fonseca"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"42704","messageId":"20070520121917.GA18850@diku.dk","threadId":"8241","inReplyTo":null,"subject":"[PATCH] branch: fix segfault when resolving an invalid HEAD","fromName":"Jonas Fonseca","fromEmail":"fonseca@diku.dk","sentAt":"2007-05-20T12:19:17Z","receivedAt":"2007-05-20T12:19:17Z","isPatch":true,"sender":{"key":"fonseca@diku.dk","avatar":"https://gravatar.com/avatar/f82f3ad698717c51873b020c750a92438c820a24056dc39fe4d07baa10a92264?d=mp&s=160"},"body":"Caused by return value of resolve_ref being passed directly\nto xstrdup whereby the sanity checking was never reached.\n\nSigned-off-by: Jonas Fonseca <fonseca@diku.dk>\n---\n builtin-branch.c |    3 ++-\n 1 files changed, 2 insertions(+), 1 deletions(-)\n\n Discovered while renaming a ref from \"a/b\" to \"a\" while redoing some\n changes. After a `git push --all`, `git branch` in the remote repo\n segfaulted, since its HEAD was still pointing to \"a/b\".\n\ndiff --git a/builtin-branch.c b/builtin-branch.c\nindex 6bd5843..a5b6bbe 100644\n--- a/builtin-branch.c\n+++ b/builtin-branch.c\n@@ -623,9 +623,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix)\n \t    (rename && force_create))\n \t\tusage(builtin_branch_usage);\n \n-\thead = xstrdup(resolve_ref(\"HEAD\", head_sha1, 0, NULL));\n+\thead = resolve_ref(\"HEAD\", head_sha1, 0, NULL);\n \tif (!head)\n \t\tdie(\"Failed to resolve HEAD as a valid ref.\");\n+\thead = xstrdup(head);\n \tif (!strcmp(head, \"HEAD\")) {\n \t\tdetached = 1;\n \t}\n-- \n1.5.2.rc3.800.ga489e-dirty\n\n-- \nJonas Fonseca\n"},{"id":"42707","messageId":"2c6b72b30705200544g2f9cb67eod5ea9342c3fda2a5@mail.gmail.com","threadId":"8241","inReplyTo":"20070520121917.GA18850@diku.dk","subject":"Re: [PATCH] branch: fix segfault when resolving an invalid HEAD","fromName":"Jonas Fonseca","fromEmail":"jonas.fonseca@gmail.com","sentAt":"2007-05-20T12:44:47Z","receivedAt":"2007-05-20T12:44:47Z","isPatch":true,"sender":{"key":"jonas.fonseca@gmail.com","avatar":"https://gravatar.com/avatar/9b7fa23cce50269e5d164312b6ac5ae818a180f837b38f28f3bdf689dd7f96cd?d=mp&s=160"},"body":"On 5/20/07, Jonas Fonseca <fonseca@diku.dk> wrote:\n> Caused by return value of resolve_ref being passed directly\n> to xstrdup whereby the sanity checking was never reached.\n\nWhile checking other usage of resolve_ref, this problem also occurs in\nbuiltin-show-branch.c around line 695, however, the logic later in the\nfile seems to be more forgiving so I have no idea of how to patch it.\n\n-- \nJonas Fonseca\n"}]}