Subject: Re: Error in `git': free(): invalid pointer (was Re: [PATCH] sequencer: improve config handling)

From: Kaartic Sivaraam <[email-masked]>
Date: Thu, 21 Dec 2017 20:32:29 +0530

On Thursday 21 December 2017 02:09 AM, [email-masked] wrote:
> 
> 
>     Hi Kaartic
> 
>     I'm replying off list as I've only got access to webmail at the
>     moment.

No issues brought the CCs including the list to ensure we don't miss things.

>     Are you able to do a backtrace with debugging symbols
>     please, I'm finding it hard to glean anything from the backtrace
>     here. 

That's confusing, I already had the following in my `config.mak` while 
compiling,

DEVELOPER=1
DEVELOPERS=1
CFLAGS += -g -O2
CFLAGS += -DFLEX_ARRAY=2048

NO_GETTEXT=1
prefix=/home/$(USER)/.local
#CFLAGS += -Wno-unused-value

As you can see the `-g` flag is there in CFLAGS.

If this output doesn't give much sense could you be specific about what 
output you want i.e., by mentioning the command, showing a sample etc., 
I'm not sure how to go about debugging with "git rebase" as it's a script.

> Also does it definitely bisect to this patch or the merge of
>     this branch?
> 

"git bisect" speaking,

28d6daed4f119940ace31e523b3b272d3d153d04 is the first bad commit
commit 28d6daed4f119940ace31e523b3b272d3d153d04
Author: Phillip Wood <[email-masked]>
Date:   Wed Dec 13 11:46:21 2017 +0000

    sequencer: improve config handling
    
    The previous config handling relied on global variables, called
    git_default_config() even when the key had already been handled by
    git_sequencer_config() and did not initialize the diff configuration
    variables. Improve this by: i) loading the default values for message
    cleanup and gpg signing of commits into struct replay_opts;
    ii) restructuring the code to return immediately once a key is
    handled; and iii) calling git_diff_basic_config(). Note that
    unfortunately it is not possible to return early if the key is handled
    by git_gpg_config() as it does not indicate to the caller if the key
    has been handled or not.
    
    The sequencer should probably have been calling
    git_diff_basic_config() before as it creates a patch when there are
    conflicts. The shell version uses 'diff-tree' to create the patch so
    calling git_diff_basic_config() should match that. Although 'git
    commit' calls git_diff_ui_config() I don't think the output of
    print_commit_summary() is affected by anything that is loaded by that
    as print_commit_summary() always turns on rename detection so would
    ignore the value in the user's configuration anyway. The other values
    loaded by git_diff_ui_config() are about the formatting of patches so
    are not relevant to print_commit_summary().
    
    Signed-off-by: Phillip Wood <[email-masked]>
    Signed-off-by: Junio C Hamano <[email-masked]>

:040000 040000 bbd487cc285ae12cefb97a9661de4ff27d182727 9460ac528bf68f331088412f62e5d6a39305854b M	builtin
:100644 100644 99452a0e89777999418c116386f924be396ed04a 7051b20b76292e3b539875f0dc38108a734d2164 M	sequencer.c
:100644 100644 77cb174b2aaf3972ebb9e6ec379252be96dedd3d 3a5072c2ab9088c237b83d92deae3c801289e543 M	sequencer.h

FWIW, I started the bisection with `v2.11.0`  as good (because "git
rebase -i HEAD~10 worked there) and the tip of `next` (cfbfd45ee (Sync
with master, 2017-12-19)) as bad.

Here's the bisect log for a shorter range of bisection (which was
possible after I discovered the bad commit in the previous bisect)

git bisect start
# bad: [cfbfd45ee6e49007fdeb00008904064ba98f65e0] Sync with master
git bisect bad cfbfd45ee6e49007fdeb00008904064ba98f65e0
# good: [a4212f7ebd7158a1e237d776fb4bbd7a295d0bda] Merge branch 'pw/sequencer-in-process-commit' into next
git bisect good a4212f7ebd7158a1e237d776fb4bbd7a295d0bda
# good: [bdae4af87053490adad2dc9fb184d6d050d46a4c] Merge branch 'sg/setup-doc-update'
git bisect good bdae4af87053490adad2dc9fb184d6d050d46a4c
# bad: [6d12e08217360cfc042ec484129771f73ad7b97f] Merge branch 'rs/strbuf-read-once-reset-length' into next
git bisect bad 6d12e08217360cfc042ec484129771f73ad7b97f
# bad: [1b791d2503742b060f91b8159b85c06335634bd8] Merge branch 'ab/simplify-perl-makefile' into next
git bisect bad 1b791d2503742b060f91b8159b85c06335634bd8
# bad: [abfed699db9f0f0e6f03f5ee3e9d137944ba4216] Merge branch 'sb/clone-recursive-submodule-doc' into next
git bisect bad abfed699db9f0f0e6f03f5ee3e9d137944ba4216
# bad: [ec4d2b9c843b8b338ffa8906eea70095b3098c1e] Merge branch 'pw/sequencer-in-process-commit' into next
git bisect bad ec4d2b9c843b8b338ffa8906eea70095b3098c1e
# good: [5279b80103bde3ec5d6108fa8f43de2017668039] Merge branch 'tb/check-crlf-for-safe-crlf' into next
git bisect good 5279b80103bde3ec5d6108fa8f43de2017668039
# bad: [28d6daed4f119940ace31e523b3b272d3d153d04] sequencer: improve config handling
git bisect bad 28d6daed4f119940ace31e523b3b272d3d153d04
# first bad commit: [28d6daed4f119940ace31e523b3b272d3d153d04] sequencer: improve config handling

-- 
Kaartic