svn commit: r1935791 - in spamassassin/trunk: . lib/Mail/SpamAssassin lib/Mail/SpamAssassin/Handler lib/Mail/SpamAssassin/Message lib/Mail/SpamAssassin/PDF lib/Mail/SpamAssassin/PDF/Context lib/Mail/SpamAssassin/PDF/Filter rules t t/data t/data/nice t/...
[email protected] Thu, 02 Jul 2026 04:24:26 -0000
| Newsgroups | gmane.mail.spam.spamassassin.cvs |
|---|---|
| Message-ID | <178296626615.3540335.17682533729530999306@svn03-he-fi> |
Author: fkento
Date: Thu Jul 2 04:24:25 2026
New Revision: 1935791
Log:
Add the first six MIME-part handlers to the handler framework
The handler framework itself shipped in an earlier release; this adds the
first set of handlers that make it useful. The point of the paradigm is
to process nested content by chaining handlers together: each handler can
return synthetic child parts that the framework re-dispatches by type, so
JavaScript embedded in an HTML file inside a rar archive, or text in an
image embedded in a PDF, is unwrapped one layer at a time and reaches the
handler that can inspect it -- all bounded by handler_max_depth,
handler_max_parts, handler_max_bytes, and handler_time_limit.
Handlers (lib/Mail/SpamAssassin/Handler/):
HTML (text/html) - render HTML parts and surface content with no MIME
part of its own (inline data: images, embedded JavaScript) as child
parts for the image and JavaScript handlers.
JavaScript (text/javascript) - collect script text for the new
"script" rule type and add navigation/redirect URLs to the URI
detail list (type "script").
SVG (image/svg+xml) - expose SVG text to the new "svgtext" rule type,
add links to the URI detail list (type "svg"), and surface embedded
script for the JavaScript handler.
Image (image/*) - OCR image parts with tesseract and inject the text
into the body. New "imagetext" rule type.
PDF (application/pdf) - parse PDFs with the new pure-Perl
Mail::SpamAssassin::PDF parser, expose metadata via pdf2_* eval rules
and _PDF2*_ tags, add URLs to the URI detail list (type "pdf"), and
extract embedded images for the image handler.
Archive (application/zip, application/vnd.rar) - unpack zip and rar
attachments and return the files inside as child parts for
re-dispatch.
HTML, JavaScript, and SVG are loaded by default from v403.pre; Image,
PDF, and Archive ship commented-out because they depend on external tools
(tesseract, unrar) or non-core Perl modules (Crypt::RC4, Crypt::Mode::CBC).
Also adds the pure-Perl PDF parser (lib/Mail/SpamAssassin/PDF/), handler
and PDF unit tests plus fixtures under t/, and updates HTML.pm and
Message/Node.pm to support the handlers. UPGRADE, MANIFEST, and
rules/v403.pre updated accordingly.
Added:
spamassassin/trunk/lib/Mail/SpamAssassin/Handler/
spamassassin/trunk/lib/Mail/SpamAssassin/Handler/Archive.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Handler/HTML.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Handler/Image.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Handler/JavaScript.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Handler/PDF.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Handler/SVG.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Context/
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Context.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Context/Info.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Core.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/ASCII85Decode.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/Decrypt.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/FlateDecode.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/LZWDecode.pm
spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Parser.pm
spamassassin/trunk/t/data/mockimagehandler.pm
spamassassin/trunk/t/data/nice/handler_archive_octet
spamassassin/trunk/t/data/nice/handler_archive_rar
spamassassin/trunk/t/data/nice/handler_archive_zip
spamassassin/trunk/t/data/nice/handler_html
spamassassin/trunk/t/data/nice/handler_image
spamassassin/trunk/t/data/nice/handler_image_heic
spamassassin/trunk/t/data/nice/handler_image_octet
spamassassin/trunk/t/data/nice/handler_javascript
spamassassin/trunk/t/data/nice/handler_javascript_attach
spamassassin/trunk/t/data/nice/handler_javascript_html_attach
spamassassin/trunk/t/data/nice/handler_pdf
spamassassin/trunk/t/data/nice/handler_pdf_encrypted
spamassassin/trunk/t/data/nice/handler_pdf_ocrimage
spamassassin/trunk/t/data/nice/handler_pdf_octet
spamassassin/trunk/t/data/nice/handler_svg
spamassassin/trunk/t/data/pdf/
spamassassin/trunk/t/data/pdf/aesv2.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/aesv2_cleartext_meta.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/aesv3.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/ascii85.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/indirect_mediabox.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/inline_image.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/lzw.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/mailto.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/multipage.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/ocr_image.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/openaction_js.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/protected.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/rc4_128.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/rc4_40.pdf (contents, props changed)
spamassassin/trunk/t/data/pdf/sample.pdf (contents, props changed)
spamassassin/trunk/t/handler_archive.t
spamassassin/trunk/t/handler_html.t
spamassassin/trunk/t/handler_image.t
spamassassin/trunk/t/handler_image_heic.t
spamassassin/trunk/t/handler_image_size.t
spamassassin/trunk/t/handler_image_text.t
spamassassin/trunk/t/handler_javascript.t
spamassassin/trunk/t/handler_pdf.t
spamassassin/trunk/t/handler_svg.t
spamassassin/trunk/t/pdf_assert_token.t
spamassassin/trunk/t/pdf_extract_images.t
spamassassin/trunk/t/pdf_get_array.t
spamassassin/trunk/t/pdf_get_dict.t
spamassassin/trunk/t/pdf_get_name.t
spamassassin/trunk/t/pdf_get_number.t
spamassassin/trunk/t/pdf_get_reference.t
spamassassin/trunk/t/pdf_get_string.t
spamassassin/trunk/t/pdf_get_token.t
spamassassin/trunk/t/pdf_info.t
Modified:
spamassassin/trunk/MANIFEST
spamassassin/trunk/UPGRADE
spamassassin/trunk/lib/Mail/SpamAssassin/HTML.pm
spamassassin/trunk/lib/Mail/SpamAssassin/Message/Node.pm
spamassassin/trunk/rules/v403.pre
NOTE: this message was too long when including "diff" contents.
The contents have been replaced with URLs to display the
diff contents on a web page.
Modified: spamassassin/trunk/MANIFEST
Modified: spamassassin/trunk/UPGRADE
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/HTML.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/Handler/Archive.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/Handler/HTML.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/Handler/Image.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/Handler/JavaScript.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/Handler/PDF.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/Handler/SVG.pm
Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Message/Node.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Context.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Context/Info.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Core.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/ASCII85Decode.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/Decrypt.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/FlateDecode.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Filter/LZWDecode.pm
Added: spamassassin/trunk/lib/Mail/SpamAssassin/PDF/Parser.pm
Modified: spamassassin/trunk/rules/v403.pre
Added: spamassassin/trunk/t/data/mockimagehandler.pm
Added: spamassassin/trunk/t/data/nice/handler_archive_octet
Added: spamassassin/trunk/t/data/nice/handler_archive_rar
Added: spamassassin/trunk/t/data/nice/handler_archive_zip
Added: spamassassin/trunk/t/data/nice/handler_html
Added: spamassassin/trunk/t/data/nice/handler_image
Added: spamassassin/trunk/t/data/nice/handler_image_heic
Added: spamassassin/trunk/t/data/nice/handler_image_octet
Added: spamassassin/trunk/t/data/nice/handler_javascript
Added: spamassassin/trunk/t/data/nice/handler_javascript_attach
Added: spamassassin/trunk/t/data/nice/handler_javascript_html_attach
Added: spamassassin/trunk/t/data/nice/handler_pdf
Added: spamassassin/trunk/t/data/nice/handler_pdf_encrypted
Added: spamassassin/trunk/t/data/nice/handler_pdf_ocrimage
Added: spamassassin/trunk/t/data/nice/handler_pdf_octet
Added: spamassassin/trunk/t/data/nice/handler_svg
Added: spamassassin/trunk/t/data/pdf/aesv2.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/aesv2_cleartext_meta.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/aesv3.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/ascii85.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/indirect_mediabox.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/inline_image.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/lzw.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/mailto.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/multipage.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/ocr_image.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/openaction_js.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/protected.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/rc4_128.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/rc4_40.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/data/pdf/sample.pdf
==============================================================================
Binary file. No diff available.
Added: spamassassin/trunk/t/handler_archive.t
Added: spamassassin/trunk/t/handler_html.t
Added: spamassassin/trunk/t/handler_image.t
Added: spamassassin/trunk/t/handler_image_heic.t
Added: spamassassin/trunk/t/handler_image_size.t
Added: spamassassin/trunk/t/handler_image_text.t
Added: spamassassin/trunk/t/handler_javascript.t
Added: spamassassin/trunk/t/handler_pdf.t
Added: spamassassin/trunk/t/handler_svg.t
Added: spamassassin/trunk/t/pdf_assert_token.t
Added: spamassassin/trunk/t/pdf_extract_images.t
Added: spamassassin/trunk/t/pdf_get_array.t
Added: spamassassin/trunk/t/pdf_get_dict.t
Added: spamassassin/trunk/t/pdf_get_name.t
Added: spamassassin/trunk/t/pdf_get_number.t
Added: spamassassin/trunk/t/pdf_get_reference.t
Added: spamassassin/trunk/t/pdf_get_string.t
Added: spamassassin/trunk/t/pdf_get_token.t
Added: spamassassin/trunk/t/pdf_info.t