From: Kristoffer Haugsbakk Date: Tue, 03 Mar 2026 23:49:53 GMT Subject: Re: Crash on git log with -L and -G on file rename Message-ID: <54a45011-c0f5-4852-b344-b81c36ed8924@app.fastmail.com> In-Reply-To: On Tue, Mar 3, 2026, at 21:42, Matthew Hughes wrote: > Hi, > > I hit a crash (assertion error) running `git log` with both `-L` and `-G` under > certain conditions. I've created script to reproduce the behaviour in a fresh > git repo: > > #!/usr/bin/env bash > > set -o errexit > > git init . > # Note: example is .rs file, but it should work with anything that > -L understands > echo "fn my_func() {}" > file.rs > # 1. file named 'file.rs' > git add file.rs > git commit --message 'Add the file' > > # 2. separate branch with the file renamed > git checkout -b some-branch > git mv file.rs new_file.rs > git commit --message 'Move the file' > > git checkout - > git commit --allow-empty --message 'Some extra commit so we get a > merge commit' > # 3. merge: one parent has file.rs, the other has new_file.rs > git merge --no-edit some-branch > > # 4. post merge, move the file back > git mv new_file.rs file.rs > git commit --message 'Move the file back' > > # 5. things go BOOM > git log -L:my_func:file.rs -G '.' > > I'm not sure if _every_ step in that script is necessary, but it's the simplest > setup I could figure out to trigger the crash. Running that script I hit the > error: > > git: line-log.c:1056: process_diff_filepair: Assertion > `pair->two->oid_valid' failed. > Aborted (core dumped) git log -L:my_func:file.rs > -G '.' > > The backtrace shows that the failed assertion occurs under > `process_ranges_merge_commit`, so maybe there's an issue with the file being > renamed on both sides of the merge? > > The crash requires both flags to trigger, remove either and it will run fine. > > I've tested the above on the `git` from my system package manager on Arch > Linux: git version 2.53.0, and one built from source at > 2cc71917514657b93014134350864f4849edfc83 (the version of 'master' checked out > on my machine at the time). I don't think reproduction relies on any specific > config since I've had it trigger with both `GIT_CONFIG_GLOBAL` and > `GIT_CONFIG_SYSTEM` set to `/dev/null` > > Just for reference, I originally triggered the bug in the `rustfmt` repo[1] > (checked-out at cebab3e99259be82ff069e5ae89e91855d79e534) running: > > git log -G offset_left -L:format_trait:src/items.rs > > Link: github.com/rust-lang/rustfmt [1] I was able to reproduce this on `master`, `next`, and `seen`. • master: 50d063e3 (The 10th batch, 2026-03-03) • seen: 62670724 (Merge branch 'ng/submodule-default-remote' into seen, 2026-03-03) • 87284122 (Sync with 'master', 2026-03-03)