git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[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
Next: Jeff King
Message 1 of 47 in “[REGRESSION] uninitialized value $address in git send-email when given multiple recipients separated by commas”
  1. Bagas SanjayaSep 22, 2023
  2. Jeff KingSep 24, 2023
  3. Bagas SanjayaSep 25, 2023
  4. Jeff KingSep 25, 2023
  5. Todd ZullingerSep 25, 2023
  6. Jeff KingSep 25, 2023
  7. Bagas SanjayaOct 11, 2023
  8. Michael StrawbridgeOct 11, 2023
  9. send-email: move process_address_list earlier to avoid, uninitialized address errorMichael Strawbridge, Oct 11, 2023
  10. Michael StrawbridgeOct 11, 2023
  11. Junio C HamanoOct 11, 2023
  12. Jeff KingOct 11, 2023
  13. Junio C HamanoOct 11, 2023
  14. Jeff KingOct 11, 2023
  15. Michael StrawbridgeOct 13, 2023
  16. Jeff KingOct 20, 2023
  17. Jeff KingOct 20, 2023
  18. 0/3 some send-email --compose fixesJeff King, Oct 20, 2023
  19. 1/3 doc/send-email: mention handling of "reply-to" with --composeJeff King, Oct 20, 2023
  20. 2/3 Revert "send-email: extract email-parsing code into a subroutine"Jeff King, Oct 20, 2023
  21. Oswald BuddenhagenOct 20, 2023
  22. Jeff KingOct 23, 2023
  23. Oswald BuddenhagenOct 23, 2023
  24. Jeff KingOct 25, 2023
  25. Oswald BuddenhagenOct 25, 2023
  26. Junio C HamanoOct 27, 2023
  27. Jeff KingOct 30, 2023
  28. Junio C HamanoOct 20, 2023
  29. Jeff KingOct 23, 2023
  30. 3/3 send-email: handle to/cc/bcc from --compose messageJeff King, Oct 20, 2023
  31. Eric SunshineOct 20, 2023
  32. Junio C HamanoOct 20, 2023
  33. Jeff KingOct 23, 2023
  34. Michael StrawbridgeOct 24, 2023
  35. send-email: move validation code below process_address_listMichael Strawbridge, Oct 24, 2023
  36. Junio C HamanoOct 24, 2023
  37. Junio C HamanoOct 24, 2023
  38. Michael StrawbridgeOct 25, 2023
  39. send-email: move validation code below process_address_listMichael Strawbridge, Oct 25, 2023
  40. Junio C HamanoOct 26, 2023
  41. Michael StrawbridgeOct 26, 2023
  42. Jeff KingOct 25, 2023
  43. Michael StrawbridgeOct 25, 2023
  44. Uwe Kleine-KönigOct 25, 2023
  45. Junio C HamanoOct 27, 2023
  46. Bagas SanjayaOct 20, 2023
  47. Bagas SanjayaSep 26, 2023

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.