Hi, On Fri, 2 Mar 2007, Paolo Bonzini wrote: > >> + remote_value[slash - remote_name] = 0; > > > > You should check if slash == NULL and error out before using it. > > remote_name is of the form "REMOTE/BRANCH", because it comes from > dwim_ref's output after stripping "refs/remotes/" from the beginning. You can create a new "remote" branch anytime by $ git update-ref refs/remotes/lirumlarum HEAD Your code would realize that it is a remote ref, strip "refs/remotes/", and then call strchr("lirumlarum", '/'), which returns NULL. On a related note, it _might_ make sense to check that the remote information is set as expected: static const char *remote_name; static int found_remote, remote_name_len; static int find_remote(const char *key, const char *value) { /* * This checks if * remote.<bla>.fetch == refs/heads/*:refs/heads/<bla>/* * where <bla> is the remote_name. */ if (!prefixcmp(key, "remote.") && !prefixcmp(key + 7, remote_name) && !strcmp(key + 7 + remote_name_len, ".fetch") && value && !prefixcmp(value, "refs/heads/*:refs/remotes/") && !prefixcmp(value + 26, remote_name) && !strcmp(value + 26 + remote_name, "/*")) { found_remote = 1; return -1; /* stop parsing config */ } return 0; } and then in remote_pull(): found_remote = 0; remote_name = branch_name; remote_name_len = slash - branch_name; git_config(find_remote); if (!found_remote) { warn("Remote %s was not created with git-remote; " "will not add it as default merge source to %s", branch_name, name); return; } We could rely on new git users not to fiddle with the remote information in the config, and old-timers still using .git/remotes/ or .git/branches would be told why the default merge information was not set up. Ciao, Dscho - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html