git-send-email: fix handling of special characters
PATCH 1/1 git-send-email: fix handling of special characters
When patch sender's name has special characters,
git send-email did not quote it before matching
against the author name.
As a result it would produce mail like this:
Date: Thu, 23 May 2013 16:36:00 +0300
From: "Michael S. Tsirkin" <[email protected]>
To: [email protected]
Cc: "Michael S. Tsirkin" <[email protected]>
Subject: [PATCH 0/9] virtio: switch to linux headers
Message-Id: <[email protected]>
From: "Michael S. Tsirkin" <[email protected]>
Fix by sanitizing before matching to patch author name.
--- git-send-email.perl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
git-send-email.perl +2 -1
@@ -1400,7 +1400,8 @@ foreach my $t (@files) { $subject = quote_subject($subject, $auto_8bit_encoding); } - if (defined $author and $author ne $sender) { + my $sanitized_sender = sanitize_address($sender); + if (defined $author and $author ne $sanitized_sender) { $message = "From: $author\n\n$message"; if (defined $author_encoding) { if ($has_content_type) {
Signature · 1 line
MST
Quoted 26 lines · Michael S. Tsirkin
When patch sender's name has special characters,
git send-email did not quote it before matching
against the author name.
As a result it would produce mail like this:Date: Thu, 23 May 2013 16:36:00 +0300
From: "Michael S. Tsirkin" <[email protected]>
To: [email protected]
Cc: "Michael S. Tsirkin" <[email protected]>
Subject: [PATCH 0/9] virtio: switch to linux headers
Message-Id: <[email protected]>From: "Michael S. Tsirkin" <[email protected]>
Fix by sanitizing before matching to patch author name.
Signed-off-by Michael S. Tsirkin <[email protected]>--- git-send-email.perl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)git-send-email.perl +0
-0
git-send-email.perl foreach my $t (@files) { · line 1407
Quoted 9 lines
git-send-email.perl +2
-1@@ -1400,7 +1400,8 @@ foreach my $t (@files) { $subject = quote_subject($subject, $auto_8bit_encoding); } - if (defined $author and $author ne $sender) { + my $sanitized_sender = sanitize_address($sender); + if (defined $author and $author ne $sanitized_sender) { $message = "From: $author\n\n$message"; if (defined $author_encoding) { if ($has_content_type) {
Is $author already sanitized at this point in the code? I see it was unwrapped with unquote_rfc2047 after it was read from the From:
line; will it always be the same as sanitize_address($author) would return, and if not, would you rather compare between sanitized versions of sender and author, no?
Also, isn't the $sender the same during the whole outer loop that iterates over @files? Do we need to apply sanitize_address() on it over and over for each and every logical line in the @header?
This comment also applies to the other patch but they probably should become a single patch anyway, I guess?
Quoted 31 lines · Junio C Hamano
Quoted 29 lines · Michael S. Tsirkin
When patch sender's name has special characters,
git send-email did not quote it before matching
against the author name.
As a result it would produce mail like this:Date: Thu, 23 May 2013 16:36:00 +0300
From: "Michael S. Tsirkin" <[email protected]>
To: [email protected]
Cc: "Michael S. Tsirkin" <[email protected]>
Subject: [PATCH 0/9] virtio: switch to linux headers
Message-Id: <[email protected]>From: "Michael S. Tsirkin" <[email protected]>
Fix by sanitizing before matching to patch author name.
Signed-off-by Michael S. Tsirkin <[email protected]>--- git-send-email.perl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)git-send-email.perl +0
-0@@ -1400,7 +1400,8 @@ foreach my $t (@files) { $subject = quote_subject($subject, $auto_8bit_encoding); }
Quoted 12 lines
git-send-email.perl foreach my $t (@files) { · line 1407
Quoted 6 lines
git-send-email.perl +2
-1- if (defined $author and $author ne $sender) { + my $sanitized_sender = sanitize_address($sender); + if (defined $author and $author ne $sanitized_sender) { $message = "From: $author\n\n$message"; if (defined $author_encoding) { if ($has_content_type) {Is $author already sanitized at this point in the code? I see it was unwrapped with
unquote_rfc2047after it was read from the From:
line; will it always be the same assanitize_address($author)would return, and if not, would you rather compare between sanitized versions of sender and author, no?
Yes. I'll have to look at the code more closely.
In my testing author here is "Michael S. Tsirkin" <[email protected]> so it matches the sanitized sender.
Of course that's because my name does not have non-ascii, just a dot.
Quoted 6 lines
Also, isn't the $sender the same during the whole outer loop that iterates over @files? Do we need to apply
sanitize_address()on it over and over for each and every logical line in the @header?This comment also applies to the other patch but they probably should become a single patch anyway, I guess?
OK so now you are ok with this last bit, right?
Quoted 11 lines · Michael S. Tsirkin
Quoted 5 lines
Is $author already sanitized at this point in the code? I see it was unwrapped with
unquote_rfc2047after it was read from the From:
line; will it always be the same assanitize_address($author)would return, and if not, would you rather compare between sanitized versions of sender and author, no?Yes. I'll have to look at the code more closely.
In my testing author here is "Michael S. Tsirkin" <[email protected]> so it matches the sanitized sender.
Of course that's because my name does not have non-ascii, just a dot.
So the conclusion is that the logic to see if the names are the same needs a bit more work than what was posted, I think?
Quoted 8 lines
Quoted 6 lines
Also, isn't the $sender the same during the whole outer loop that iterates over @files? Do we need to apply
sanitize_address()on it over and over for each and every logical line in the @header?This comment also applies to the other patch but they probably should become a single patch anyway, I guess?
OK so now you are ok with this last bit, right?
Sorry, but I am not sure what you are asking.
Do I think the assignment to $sanitized_sender can and should be done just once, not once per file, if the code inspection tells us that $sender is a constant inside the foreach (@files) loop?
Do I think these two are solving pretty much the same thing and is better to be done in a single patch?
I didn't really think them through when I responded, but now after you made me think, I would say the answers to both of them are yes.
Quoted 8 lines · Junio C Hamano
Quoted 6 lines · Michael S. Tsirkin
Quoted 5 lines
Is $author already sanitized at this point in the code? I see it was unwrapped with
unquote_rfc2047after it was read from the From:
line; will it always be the same assanitize_address($author)would return, and if not, would you rather compare between sanitized versions of sender and author, no?
Quoted 8 lines
Quoted 5 lines
Yes. I'll have to look at the code more closely.
In my testing author here is "Michael S. Tsirkin" <[email protected]> so it matches the sanitized sender.
Of course that's because my name does not have non-ascii, just a dot.So the conclusion is that the logic to see if the names are the same needs a bit more work than what was posted, I think?
I think so. And a bit more testing with non-ASCII. Plan to look into this around Sunday if no one beats me to it.
Quoted 20 lines
Quoted 8 lines
Quoted 6 lines
Also, isn't the $sender the same during the whole outer loop that iterates over @files? Do we need to apply
sanitize_address()on it over and over for each and every logical line in the @header?This comment also applies to the other patch but they probably should become a single patch anyway, I guess?
OK so now you are ok with this last bit, right?
Sorry, but I am not sure what you are asking.
Do I think the assignment to $sanitized_sender can and should be done just once, not once per file, if the code inspection tells us that $sender is a constant inside the foreach (@files) loop?
Do I think these two are solving pretty much the same thing and is better to be done in a single patch?
I didn't really think them through when I responded, but now after you made me think, I would say the answers to both of them are yes.
Quoted 10 lines · Junio C Hamano
git-send-email.perl foreach my $t (@files) { · line 1407
Quoted 5 lines
git-send-email.perl +2
-0+ my $sanitized_sender = sanitize_address($sender); + if (defined $author and $author ne $sanitized_sender) { $message = "From: $author\n\n$message"; if (defined $author_encoding) { if ($has_content_type) {...
Also, isn't the $sender the same during the whole outer loop that iterates over @files? Do we need to applysanitize_address()on it over and over for each and every logical line in the @header?
Ahh, I think $sender is constant, but this is not for each @header line, but done per @file, so it is a much lessor offence than what I originally thought. The other one does do that inside the loop but if we have a single copy of $sanitized_sender at the very beginning that will become a non-issue.
Quoted 2 lines
This comment also applies to the other patch but they probably should become a single patch anyway, I guess?