laminas / laminas-mail

Provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages
https://docs.laminas.dev/laminas-mail/
BSD 3-Clause "New" or "Revised" License
94 stars 64 forks source link

`Headers::fromString` strips local part quotes which turns it into invalid dot-atom format #250

Open Traisuma opened 1 year ago

Traisuma commented 1 year ago

Bug Report

Version 2.34

Summary

When passing a valid E-Mail Headers part to the Headers#fromString method, an exception is thrown due to the fact that AbstractAddressList#fromString is stripping quotes from From E-Mail local-part.

Current behavior

Uncaught Laminas\Mail\Exception\InvalidArgumentException: 'System Administrator' can not be matched against dot-atom format.
    0.0059    1639224   2. Laminas\Mail\Headers::fromString($string = 'From: "System Administrator"@example.org', $eol = ???) /path/scratch_38.php:4
    0.0060    1640112   3. Laminas\Mail\Headers->addHeaderLine($headerFieldNameOrLine = 'From: "System Administrator"@example.org', $fieldValue = ???) /path/vendor/laminas/laminas-mail/src/Headers.php:142
    0.0060    1640112   4. Laminas\Mail\Headers->loadHeader($headerLine = 'From: "System Administrator"@example.org') /path/vendor/laminas/laminas-mail/src/Headers.php:306
    0.0065    1720376   5. Laminas\Mail\Header\AbstractAddressList::fromString($headerLine = 'From: "System Administrator"@example.org') /path/vendor/laminas/laminas-mail/src/Headers.php:572
    0.0066    1728528   6. array_map($callback = class Closure { virtual $closure = "Laminas\Mail\Header\AbstractAddressList::Laminas\Mail\Header\{closure}" }, $array = [0 => '"System Administrator"@example.org']) /path/vendor/laminas/laminas-mail/src/Header/AbstractAddressList.php:123
    0.0066    1729008   7. Laminas\Mail\Header\AbstractAddressList::Laminas\Mail\Header\{closure:/path/vendor/laminas/laminas-mail/src/Header/AbstractAddressList.php:104-122}($value = '"System Administrator"@example.org') /path/vendor/laminas/laminas-mail/src/Header/AbstractAddressList.php:123
    0.0068    1759648   8. Laminas\Mail\Address::fromString($address = 'System Administrator@example.org', $comment = '') /path/vendor/laminas/laminas-mail/src/Header/AbstractAddressList.php:121
    0.0068    1760480   9. Laminas\Mail\Address->__construct($email = 'System Administrator@example.org', $name = NULL, $comment = '') /path/vendor/laminas/laminas-mail/src/Address.php:59

Reproduction

\Laminas\Mail\Headers::fromString('From: "System Administrator"@example.org');

By removing the quotes from the E-Mail localpart, the local part becomes invalid from a validation PoV.

Expected behavior

The local part of an address is not modified when passing headers via Headers::fromString.

Xerkus commented 1 year ago

What is the full address you are trying to validate? Space is not permitted in local part unless local part is double quoted.

boesing commented 1 year ago

This issue is related to laminas-mail and is caused by

https://github.com/laminas/laminas-mail/blob/030cb35056f32b099c2784e883dcf9e214ececb0/src/Header/AbstractAddressList.php#L110-L120

I will move this issue accordingly.