* repo-wide: trim trailing spaces
Note: This doesn't touch the .tbl files in encodings/ since they include
meaningful trailing spaces (`20= `)
* patterns: clean up duplicate semicolons
* ELF: add header magic check
* glTF: use type::Magic for magic value
* glTF: check that the file size in the header matches
* xgstexture: fix generics syntax for magic value
* JPEG: define hex enum with 0x00 instead of 0X00
* CI: update deprecated actions
---------
Co-authored-by: Nik <werwolv98@gmail.com>
* Add parsing of general purpose bit flag
Add "GeneralPurposeBitFlags" bitfield definition. The names are based on
the official ZIP format specification although I chose to name the
fields closer to their purpose rather than their official name. This is
intended to make reading the pattern and its output easier. Example:
official name "Language encoding flag (EFS)" my name
"filenameAndCommentAreUtf8" because this immediately explains what it
does.
I chose not to implement the specifics of the "compressionOptions" as
their meanings are specific to the compression method used and it would
make the pattern much more complicated for (in my opinion) little gain.
I also chose to unify the names of the general purpose bit filed in the
LocalFileHeader and the CentralDirectoryFileHeader. Previously, they had
different names, suggesting they might have different meaning. According
to the official docs though, these fields have the exact same meaning.
Official docs: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
* Fix typo and remove redundant type declaration
patterns/zip: add parsing local file header, and another adjustmenst
Add missing parsing for local file headers
Add compression method
Minor adjustments: removed black colors, marked magic ids
Previously, the zip pattern was searching for the end-of-central-directory
header signature (50 4B 05 06) by searching the entire file for it. This is
*very* slow for large files, and risks false positives since those bytes
could randomly appear in compressed data. I had this happen on the first
large (>2GB) zip file I tried.
I'm now checking for the EOCD signature at exactly 22 bytes from the end of
the file (in the common case there is no zip comment), and if that fails
I search for it in the last 64KB of the file (in case there *is* a comment
at the end of the EOCD, which can't be larger than 64KB). This is much
faster, and fixes loading my zip file where it was spuriously finding the
signature in the wrong place.
This still has a low risk of false positives (what if the comment has the
50 4B 05 06 bytes? what if there is a short comment but the signature
appears in the last 64KB of compressed data?), but I don't know what's the
"right" way to find the EOCD, or how proper zip-reading tools handle the
ambiguity...
* Use spaces instead of tabs in zip.hexpat
* patterns: minor cleanup to ZIP pattern
- Remove empty and unused CentralDirectoryEntry struct.
- Shorten the comment of CentralDirectoryFileHeader.fileOffset. It was so
long that the tooltip overflowed my screen, and didn't really add much
information.
- Small whitespace changes.