fixed issue 36752 mail address display name (#37874)
authorjaymin93 <jayminsuthar93@outlook.com>
Fri, 28 Aug 2020 18:21:27 +0000 (23:51 +0530)
committerGitHub <noreply@github.com>
Fri, 28 Aug 2020 18:21:27 +0000 (20:21 +0200)
Co-authored-by: Marie Píchová <11718369+ManickaP@users.noreply.github.com>
Co-authored-by: Karel Zikmund <karelz@microsoft.com>
src/libraries/System.Net.Mail/src/System/Net/Mail/MailAddress.cs
src/libraries/System.Net.Mail/tests/Unit/MailAddressTests/MailAddressDisplayNameTest.cs

index 6155c05..d8a5d0c 100644 (file)
@@ -257,7 +257,7 @@ namespace System.Net.Mail
             }
             else
             {
-                return "\"" + DisplayName + "\" " + SmtpAddress;
+                return "\"" + DisplayName.Replace("\"", "\\\"") + "\" " + SmtpAddress;
             }
         }
 
index 0474801..acdc11f 100644 (file)
@@ -20,6 +20,43 @@ namespace System.Net.Mail.Tests
             Assert.Equal(string.Format("\"{0}\" <{1}>", DisplayNameWithUnicode, Address), _mailAddress.ToString());
         }
 
+        [Theory]
+        [InlineData(Address, "test\"Display\"Name")]
+        [InlineData(Address, "Hello \"world hello\" world")]
+        [InlineData(Address, "Hello \"world")]
+        [InlineData(Address, "Hello \"\"world")]
+        [InlineData(Address, "\"")]
+        [InlineData(Address, "Hello \\\"world hello\\\" world")]
+        public void MailAddress_WithDoubleQuotesDisplayAndMailAddress_ToStringShouldReturnEscapedDisplayNameAndAddressInAngleBrackets(string address, string displayName)
+        {
+            MailAddress mailAddress = new MailAddress(address, displayName);
+            Assert.Equal(displayName, mailAddress.DisplayName);
+            Assert.Equal(string.Format("\"{0}\" <{1}>", displayName.Replace("\"", "\\\""), address), mailAddress.ToString());
+        }
+
+        [Theory]
+        [InlineData(Address, "\"John Doe\"")]
+        [InlineData(Address, "\"\"")]
+        [InlineData(Address, "\"\"\"")]
+        [InlineData(Address, "\"John \"Johnny\" Doe\"")]
+        public void MailAddress_WithOuterDoubleQuotesDisplayAndMailAddress_ToStringShouldReturnEscapedDisplayNameAndAddressInAngleBrackets(string address, string displayName)
+        {
+            MailAddress mailAddress = new MailAddress(address, displayName);
+            displayName = displayName.Substring(1, displayName.Length - 2);
+
+            Assert.Equal(displayName, mailAddress.DisplayName);
+
+            if (string.IsNullOrEmpty(displayName))
+            {
+                Assert.Equal($"{address}", mailAddress.ToString());
+            }
+            else
+            {
+                Assert.Equal($"\"{displayName.Replace("\"", "\\\"")}\" <{address}>", mailAddress.ToString());
+            }
+        }
+
+
         [Fact]
         public void MailAddress_WithNoDisplayName_AndOnlyAddress_ToStringShouldOutputAddressOnlyWithNoAngleBrackets()
         {