v1.24.3

gildas-lormeau/SingleFilev1.24.3Sep 9, 2026by gildas-lormeau

AI Summary

This release addresses critical bug fixes including the restoration of correct font-face rule processing for composite faces, the preservation of metadata during page copying, and a correction to the self-extracting archive budget limit. It also introduces performance optimizations for large archives and updates the zip.js library.

Key Highlights

  • Fixed font rendering issues where composite faces were incorrectly embedded, restoring glyphs lost in icon fonts.
  • Resolved metadata loss when copying pages into multi-page archives.
  • Corrected the data budget for self-extracting archives to apply to both manual and automatic saves.
  • Optimized archive wrapper detection by switching from text decoding to byte scanning.
  • Updated zip.js to 2.13.1, resulting in archives that differ byte-for-byte from earlier versions.

Breaking Changes

  • Archives written by this version differ byte-for-byte from those written by earlier versions due to zip.js updates.

Full Release Notes

### Fixes

- Every `@font-face` rule of a composite face is kept, which corrects the previous release. 1.24.2 embedded only the last rule declared for a given family, style and weight, on the assumption that the cascade only ever uses the last one. CSS Fonts 4 says the opposite: rules with identical descriptors form a single composite face, checked in reverse declaration order for each character, so a character missing from the last rule's font falls back to an earlier one. An icon font split across two files lost every glyph only the earlier file carried, and rendered as tofu. Each rule keeps its own sources again, and a rule repeated with the same descriptors and the same source is still embedded once
- A source repeated as the last entry of an `@font-face` `src` list is embedded once. The comparison kept the separating comma in the text it compared, so a source declared earlier never matched the copy sitting in last position
- A page copied into a multi-page archive keeps the metadata of the entry it came from. The file attributes, the creation and last access dates, the owner and group, the compression level and any extra field the entry carried were all dropped, because the copy forwarded a hand-listed subset of the entry's properties
- The budget for data appended after a self-extracting archive is honored when a page is saved by hand, and not only when it is saved automatically. The manual save and the automatic save hand the archive writer two different option lists, and the budget was missing from the manual one, so a value set in an exported settings file changed automatic saves alone

### Changes

- zip.js updated to 2.13.1. The language encoding flag is now set only on the entries whose name or comment needs it, rather than on every entry, which is what tools reading names in the legacy code page expect. Archives written by this version therefore differ byte for byte from those written by earlier ones
- The check that chooses the wrapper hiding the archive inside the page scans the bytes instead of decoding them to text. Decoding allocated a copy of the whole archive at twice its size, on every attempt, and a large archive takes more than one attempt. The check is about five times faster and allocates nothing