Fix for failed call to Laminas\Mail\Storage\Imap->close() on invalid server response #266
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Sometimes IMAP mail servers do not respond with valid tagged lines when issuing a logout as done in
Laminas\Mail\Protocol\Imap::logout()
. This may lead to a failure innextTaggedLine()
as shown below, as the response does not contain any empty spaces and the explode does not work as expected:This results in the socket not being closed inside
logout()
, which in turn, leads to another exception whenProtocol\Imap::__destruct()
is called upon destruction, as it again attempts to issue a logout with the server because the socket variable is still set. The bugfix provided includes a check insidenextTaggedLine()
to verify that the read line can be used as expected, otherwise aRuntimeException
is thrown. Furthermore,logout()
has been altered to always close the socket even if an uncaught exception occurs.