Skip to content
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

Open
wants to merge 19 commits into
base: master
Choose a base branch
from

Conversation

pabzm
Copy link
Member

@pabzm pabzm commented Aug 15, 2024

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 or Content-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 a Content-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 a Content-Location-header is always fetched in the first place, but I didn't dare to touch that code.

This fix closes #9565

@pabzm pabzm force-pushed the check-if-attachment-is-actually-referred-to branch from d9fe09b to 73cbc95 Compare August 15, 2024 13:41
@pabzm pabzm changed the title Check if attachment is actually referred to Check if attachment is actually(!) referred to Aug 15, 2024
@pabzm pabzm self-assigned this Aug 15, 2024
@pabzm pabzm force-pushed the check-if-attachment-is-actually-referred-to branch from 73cbc95 to 636dcdf Compare August 15, 2024 13:45
@pabzm pabzm requested a review from alecpl August 15, 2024 13:52
@pabzm pabzm force-pushed the check-if-attachment-is-actually-referred-to branch 2 times, most recently from 1373f57 to 8f12091 Compare November 12, 2024 10:08
Copy link

@pabzm, @alecpl
🛎️ This PR has had no activity in two weeks.

Copy link

@pabzm, @alecpl
🛎️ This PR has had no activity in two weeks.

@pabzm pabzm mentioned this pull request Dec 19, 2024
@pabzm pabzm marked this pull request as draft December 20, 2024 17:04
pabzm added 11 commits January 2, 2025 11:05
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.
@pabzm pabzm force-pushed the check-if-attachment-is-actually-referred-to branch from 8f12091 to 54a692c Compare January 2, 2025 10:06
@pabzm pabzm force-pushed the check-if-attachment-is-actually-referred-to branch from 698570d to 321d1c6 Compare January 6, 2025 07:06
@pabzm
Copy link
Member Author

pabzm commented Jan 6, 2025

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.

@pabzm pabzm marked this pull request as ready for review January 6, 2025 13:30
@pabzm
Copy link
Member Author

pabzm commented Jan 7, 2025

@alecpl Could you have another look at this, please?

Copy link
Member

@alecpl alecpl left a 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;
Copy link
Member

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
Copy link
Member

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Attached picture is not shown if text-part is present in multipart/mixed and image-part as Content-ID
3 participants