-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Check if attachment is actually(!) referred to #9585
base: master
Are you sure you want to change the base?
Check if attachment is actually(!) referred to #9585
Conversation
d9fe09b
to
73cbc95
Compare
73cbc95
to
636dcdf
Compare
1373f57
to
8f12091
Compare
If there's no reference to it in a sibling HTML part then we handle it as a classic attachment (which is shown as downloadable).
Previously all headers were only fetched for message/rfc822, or if the Content-Type's "name" parameter was set, or if a Content-ID was set. The RFC doesn't require neither the "name" parameter nor a Content-ID for using Content-Location, though, so we shouldn't depend on those. Instead now all headers are also fetched if the main part of the Content-Type is "image", to catch more cases.
We want it tested!
We decide later, which attachment is considered "inline" and which isn't.
8f12091
to
54a692c
Compare
698570d
to
321d1c6
Compare
I would like to integrate a lot more messages into the "Message Rendering" tests, but the rest of the code is ready as it is, and I can supplement additional tests later, too. |
@alecpl Could you have another look at this, please? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll need more time to properly test this.
{ | ||
if ($this->check_context($part)) { | ||
// It may happen that we add the same part to the array many times | ||
// use part ID index to prevent from duplicates | ||
switch ($type) { | ||
case 'inline': | ||
$this->inline_parts[$part->mime_id] = $part; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like you removed a public $inline_parts
property, so remove it's declaration, please.
Content-ID: <2478d4f4b6b373ac9292cdbab380ee6bd4e4a16ee4feef5112ac3fe61b1303fe> | ||
Content-Transfer-Encoding: base64 | ||
|
||
iVBORw0KGgoAAAANSUhEUgAAAlsAAAKYCAYAAABEuT1rAAAAAXNSR0IArs4c6QAAAARnQU1BAACx |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be good to keep the test data small. I.e. use some simple/small images.
This finishes what #9472 intended to do – but didn't actually do, as I found out.
The code now checks for each non-text mime-part in a multipart-part if its
Content-ID
orContent-Location
is (probably) used in a sibling HTML-part, and only if that matches the respective mime-part is considered an "inline" attachment (that won't show up as downloadable or below the message content).The second commit in this PR makes sure that for all image-parts, all mime-part-headers are loaded from the server, in order to actually get hands on the
Content-Location
-header (which isn't always fetched in the first place). It is limited to image-parts because those are the most common ones maybe having aContent-Location
-header and I assumed that we shouldn't load the headers for every mime-part, so this seems like a workable real-world distinction for me.One could probably change how the
BODYSTRUCTURE
response is fetched and parsed to ensure aContent-Location
-header is always fetched in the first place, but I didn't dare to touch that code.This fix closes #9565