Browse Source

Fix Init Command to accept author names with Unicode combining diacritical marks

Jose Miguel Pérez Ruiz 8 years ago
parent
commit
b2f62bc06c

+ 1 - 1
src/Composer/Command/InitCommand.php

@@ -320,7 +320,7 @@ EOT
      */
     public function parseAuthorString($author)
     {
-        if (preg_match('/^(?P<name>[- .,\p{L}\p{N}\'’"()]+) <(?P<email>.+?)>$/u', $author, $match)) {
+        if (preg_match('/^(?P<name>[- .,\p{L}\p{N}\p{Mn}\'’"()]+) <(?P<email>.+?)>$/u', $author, $match)) {
             if ($this->isValidEmail($match['email'])) {
                 return array(
                     'name' => trim($match['name']),

+ 10 - 0
tests/Composer/Test/Command/InitCommandTest.php

@@ -33,6 +33,16 @@ class InitCommandTest extends TestCase
         $this->assertEquals('matti@example.com', $author['email']);
     }
 
+    public function testParseValidUtf8AuthorStringWithNonSpacingMarks()
+    {
+        // \xCC\x88 is UTF-8 for U+0308 diaeresis (umlaut) combining mark
+        $utf8_expected = "Matti Meika\xCC\x88la\xCC\x88inen";
+        $command = new InitCommand;
+        $author = $command->parseAuthorString($utf8_expected." <matti@example.com>");
+        $this->assertEquals($utf8_expected, $author['name']);
+        $this->assertEquals('matti@example.com', $author['email']);
+    }
+
     public function testParseNumericAuthorString()
     {
         $command = new InitCommand;