From: Remi Lespinet Date: Mon, 15 Jun 2015 11:16:54 GMT Subject: [RFC] send-email quote issues Message-ID: <330077615.505681.1434367014434.JavaMail.zimbra@ensimag.grenoble-inp.fr> In-Reply-To: <387683965.505610.1434366660032.JavaMail.zimbra@ensimag.grenoble-inp.fr> Hi, I'm currently working on git send-email to allow passing names containing commas. I would like to specify that the comma shouldn't be interpreted as a delimiter when there's quotes around: "Jane, Katarina Doe" This changes the behavior of the double quote. For example when passing: --to='"Jane" Doe ' to git send-email, the line produced was: To: "\"Jane\" Doe" With this modification, it would be: To: Jane Doe or To: "Jane Doe" And this will not be possible to use quote in a name anymore. Is this a problem ? Currently, git send-email contains a function which splits at commas with respect to quotes (parse_address_line introduced by 5012699d9840fe34fe0838ea0d529c2f32f76b82). It is used to parse user input when there's no recipient specified. I would like to use this function to parse --to, --cc and --bcc options, but the execution of this function depends on whether the user has the Perl library Mail::Address or not. This introduce a change in the behaviour: Output1 represents lines produced with the Mail::Address library Output2 represents lines produced without the Mail::Address library 1) Simple quote are not interpreted the same way: Input : 'Doe, "Jane' Output1 : 'Doe, "\" Jane'" Output2 : "'Doe, \"Jane'" Input : 'Jane 'Doe' Output1 : 'Jane 'Doe' Output2 : ERROR 2) Mail::Address adds a space when using a quote or a backslash in a name Input : "Jane Do"e Output1 : "\"Jane Do\" e" Output2 : "\"Jane Do\"e" Input : \Jane Doe Output1 : "\ Jane Doe" Output2 : "\Jane Doe" 3) Mail::Address works when quote is not closed Input : "Jane Doe Output1 : "\" Jane Doe" Output2 : ERROR 4) Mail::Address splits the string when there's no comma Input : Jane "Doe " Output1 : Jane, "\"Doe" Output2 : "Jane \"Doe" The following doesn't work for both: Input : "Jane Doe " Output1 : ERROR Output2 : ERROR