[
https://issues.apache.org/jira/browse/TIKA-4937?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18124170#comment-18124170
]
ASF GitHub Bot commented on TIKA-4937:
--------------------------------------
tballison opened a new pull request, #3303:
URL: https://github.com/apache/tika/pull/3303
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
Thanks for your contribution to [Apache Tika](https://tika.apache.org/)!
Your help is appreciated!
Before opening the pull request, please verify that
* there is an open issue on the [Tika issue
tracker](https://issues.apache.org/jira/projects/TIKA) which describes the
problem or the improvement. We cannot accept pull requests without an issue
because the change wouldn't be listed in the release notes.
* the issue ID (`TIKA-XXXX`)
- is referenced in the title of the pull request
- and placed in front of your commit messages surrounded by square
brackets (`[TIKA-XXXX] Issue or pull request title`)
* commits are squashed into a single one (or few commits for larger changes)
* Tika builds and unit tests pass with `./mvnw clean install` (`clean test`
alone cannot resolve the pipes plugin zips)
* if you used a generative AI tool: follow the [ASF Generative Tooling
Guidance](https://www.apache.org/legal/generative-tooling.html) (`Generated-by:
<tool>` in the commit message), and consider running the pre-flight in
`.skills/devs/pr-review/SKILL.md` — fix what it finds; don't paste its report
here
* there should be no conflicts when merging the pull request branch into the
*recent* `main` branch. If there are conflicts, please try to rebase the pull
request branch on top of a freshly pulled `main` branch
* if you add new module that downstream users will depend upon add it to
relevant group in `tika-bom/pom.xml`.
We will be able to faster integrate your pull request if these conditions
are met. If you have any questions how to fix your problem or about using Tika
in general, please sign up for the [Tika mailing
list](http://tika.apache.org/mail-lists.html). Thanks!
> Extract image dimensions and entry list from ICO/CUR files
> ----------------------------------------------------------
>
> Key: TIKA-4937
> URL: https://issues.apache.org/jira/browse/TIKA-4937
> Project: Tika
> Issue Type: New Feature
> Reporter: Dominik Schmidt
> Priority: Major
>
> h3. Background
> Tika detects {{image/vnd.microsoft.icon}} (alias {{image/x-icon}}) and
> {{ImageParser}} claims the type, but ImageIO has no ICO reader on the
> classpath, so a {{.ico}} yields nothing beyond the content type: no
> dimensions, no bit depth, no image count.
> Since TIKA-4936 every Windows EXE/DLL emits its icon groups as embedded
> {{.ico}} documents (the first one typed {{THUMBNAIL}}), so an index now sees
> plenty of .ico entries without width/height.
> h3. Proposal
> Read the ICONDIR/ICONDIRENTRY structure of {{.ico}} and {{.cur}} files
> directly (no decoding, no new dependency) and set:
> * {{tiff:ImageWidth}} / {{tiff:ImageLength}} and {{tiff:BitsPerSample}} of
> the largest image. Entries of 256 px are stored as 0 in the directory, and
> the directory's width/height/bpp fields are unreliable in general, so take
> the values from each image's header instead: the PNG IHDR for PNG-encoded
> entries, the BITMAPINFOHEADER for BMP-encoded ones (height there is doubled
> to include the AND mask).
> * the number of images
> * one multi-valued property listing each entry as {{WxH@bpp}} plus its
> encoding (bmp/png), in directory order
> * for cursors ({{.cur}}, type 2 in the header): the hotspot of the largest
> image
> No text content. Malformed files (directory beyond EOF, entry offsets outside
> the file, count 0, unknown encoding) must not throw: emit what can be read
> and record a warning.
> Implementation: a dedicated small parser in {{tika-parser-image-module}} for
> {{image/vnd.microsoft.icon}} and {{image/x-win-bitmap}}, replacing the
> {{image/x-icon}} entry in {{ImageParser}}'s supported types (which currently
> finds no reader).
> h3. Out of scope
> * Decoding or rendering the images (the thumbnail presets keep passing the
> .ico through as stored)
> * Animated cursors ({{.ani}}), {{RT_GROUP_CURSOR}} extraction from PE files
> h3. Acceptance criteria
> * {{tika -m}} on a .ico with 16/32 px BMP entries and a 256 px PNG entry
> reports 256x256, 32 bpp, 3 images and the per-entry list.
> * The embedded icons of TIKA-4936's fixtures show width/height in {{/rmeta}}
> output.
> * A .cur reports type cursor and the hotspot.
> * Truncated or corrupt .ico files yield a warning, not an exception.
> * Fixtures: {{testWindows-icons-app.ico}} / {{-doc.ico}} from TIKA-4936 plus
> one generated .cur.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)