[REGRESSION] uninitialized value $address in git send-email when given multiple recipients separated by commas
- From
Bagas Sanjaya <bagasdotme@gmail.com>
- Date
- Sep 22, 2023, 09:27 UTC
- Message-ID
- <ZQ1eGzqfyoeeTBUq@debian.me>
Hi,
This regression is similar to one I reported earlier [1], with the same error message but with slightly different reproducer (and as continuation to the former report).
I use git-send-email(1) to submit patches (occasional doc fixes) to LKML. Rather than having to type multiple --to/--cc addresses, I use the undocumented behavior of listing multiple addresses separated by comma in a single --to/--cc option. i.e.:
``` $ git send-email \ --to="foo <foo@acme.com>,bar <bar@acme.com>" \ --cc="main list <main-list@acme.com>, sub list <sub-list@acme.com>" \ /path/to/series/*.patch ```
[This is the same behavior as Thunderbird.]
In my linux kernel tree (linux.git) used for development, I add sendemail-validate hook that adds DKIM-like attestation with patatt:
``` #!/bin/sh # installed by patatt install-hook patatt sign --hook "${1}" ```
Starting from Git v2.41.0, when I try to use git-send-email(1), I got perl-related error:
``` Use of uninitialized value $address in sprintf at /home/bagas/.app/git/dist/v2.42.0/libexec/git-core/git-send-email line 1172. error: unable to extract a valid address from: ```
It looks like git-send-email(1) trips on cover letter since there is no recipient addresses there, and also on patches without Signed-off-by: trailer.
Bisecting between v2.40.0 and v2.41.0, the culprit is commit a8022c5f7b67 (send-email: expose header information to git-send-email's sendemail-validate hook, 2023-04-19). The perl error should have been reduced by [2], but this address splitting (parsing) is still not addressed.
The full bisection log is:
``` git bisect start '--term-good=ok' '--term-bad=oops' # status: waiting for both good and bad commits # ok: [73876f4861cd3d187a4682290ab75c9dccadbc56] Git 2.40 git bisect ok 73876f4861cd3d187a4682290ab75c9dccadbc56 # status: waiting for bad commit, 1 good commit known # oops: [fe86abd7511a9a6862d5706c6fa1d9b57a63ba09] Git 2.41 git bisect oops fe86abd7511a9a6862d5706c6fa1d9b57a63ba09 # ok: [b64894c2063e5875bfd95b537eafcb3e1abf46ff] Merge branch 'ow/ref-filter-omit-empty' git bisect ok b64894c2063e5875bfd95b537eafcb3e1abf46ff # ok: [ccd12a3d6cc62f51b746654ae56e26d92f89ba92] Merge branch 'en/header-split-cache-h-part-2' git bisect ok ccd12a3d6cc62f51b746654ae56e26d92f89ba92 # oops: [1e1dcb2a423cad350e8f20fdcc957064e5cff528] Merge branch 'jc/dirstat-plug-leaks' git bisect oops 1e1dcb2a423cad350e8f20fdcc957064e5cff528 # oops: [40a5d2b79b57378cc36d43d3b30e704100dc1492] Merge branch 'fc/doc-man-lift-title-length-limit' git bisect oops 40a5d2b79b57378cc36d43d3b30e704100dc1492 # ok: [07ac32fff94b245aec3e2b80efad0b5dada629cb] Merge branch 'ma/gittutorial-fixes' git bisect ok 07ac32fff94b245aec3e2b80efad0b5dada629cb # oops: [7f3cc51b284d696fdb8dfbd8c9f9d0c014019d93] Merge branch 'ar/test-cleanup-unused-file-creation-part2' git bisect oops 7f3cc51b284d696fdb8dfbd8c9f9d0c014019d93 # oops: [b6e9521956b752be4c666efedd7b91bdd05f9756] Merge branch 'ms/send-email-feed-header-to-validate-hook' git bisect oops b6e9521956b752be4c666efedd7b91bdd05f9756 # ok: [e2abfa7212525daa24a52d9f53c45b736abb5dfe] Merge branch 'hx/negotiator-non-recursive' git bisect ok e2abfa7212525daa24a52d9f53c45b736abb5dfe # oops: [a8022c5f7b678189135b6caa3fadb3d8ec0c0d48] send-email: expose header information to git-send-email's sendemail-validate hook git bisect oops a8022c5f7b678189135b6caa3fadb3d8ec0c0d48 # ok: [56adddaa06d376f3977ee91e8a769cd85439d21c] send-email: refactor header generation functions git bisect ok 56adddaa06d376f3977ee91e8a769cd85439d21c # first oops commit: [a8022c5f7b678189135b6caa3fadb3d8ec0c0d48] send-email: expose header information to git-send-email's sendemail-validate hook ```
To reproduce this regression:
1. Clone git.git repo, then branch off:
``` $ git clone https://github.com/git/git.git && cd git $ git checkout -b test ```
2. Make two dummy signed-off commits:
``` $ echo test > test && git add test && git commit -s -m "test" $ echo "test test" >> test && git commit -a -s -m "test test" ```
3. Generate patch series:
``` $ mkdir /tmp/test $ git format-patch -o /tmp/test --cover-letter main ```
4. Send the series to dummy address:
``` $ git send-email --to="foo <foo@acme.com>,bar <bar@acme.com>" /tmp/test/*.patch ```
My system runs Debian testing (trixie/sid) with perl 5.36.0.
Thanks.
[1]: https://lore.kernel.org/git/ZQhI5fMhDE82awpE@debian.me/ [2]: https://lore.kernel.org/git/545729b619308c6f3397b9aa1747f26ddc58f461.1695054945.git.me@ttaylorr.com/
-- An old man doll... just what I always wanted! - Clara