Skip to content

Jackcess 5.0.3 and jackcess-encrypt 5.0.2 - #47

Merged
clytras merged 2 commits into
masterfrom
feature/jackcess-5.0.3
Oct 8, 2026
Merged

clytras merged 2 commits into
masterfrom
feature/jackcess-5.0.3

Conversation

@clytras

@clytras clytras commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Jackcess 5.0.1 → 5.0.3 and jackcess-encrypt 5.0.0 → 5.0.2. This replaces Dependabot's #42, which bumped Jackcess alone and failed on Access 97 text; #46 fixed that.

What users see

  • Fewer warnings on Access 97 files from a non-English Access. Jackcess 5.0.2 (#163) treats a Jet 3 text index in a non-English collation as unusable and scans the catalog itself when its index is one of those. The Greek files therefore no longer report CATALOG_INDEX_UNUSABLE.
    • gr97: exits 0 instead of 1.
    • Win98 Northwind, Solutions, ORDERS: they lose the warning and still exit 1 for their other warnings.
    • Everything else in inspect is identical: the same tables, relationships, profiles and orphan checks as with 5.0.1.
  • Dates whose stored value isn't on a whole millisecond now keep the fraction they hold, where they were rounded to milliseconds. Jackcess 5.0.3 picks the coarsest rounding that converts back to the stored double. I read every date in the corpus and the local samples with both versions: 32 of 2,400,944 values change, all in indexCodes' Table6/Table6_desc, which store odd doubles on purpose. Nothing entered in Access changes.

Changed tests and goldens

  • inspect goldens of gr97, gr97enc, linkFront97, linkBack97: the CATALOG_INDEX_UNUSABLE line is gone.
  • inspect goldens of indexCodesV2000/V2003/V2007/V2010: Table6 and Table6_desc profile at fraction-digits 7 instead of 3 (the date change above).
  • ConvertCommandTest:
    • linkedTablesAreConvertedFromTheirBackEndWhenAskedTo and theLinkRootBelongsToResolveAndMustBeADirectory now expect exit 0.
    • verifySaysWhyAMatchingOutputStillExitsWithWarnings needs a source that warns while it is read. It now uses a copy of hundred.accdb with a damaged catalog index, instead of gr97.
  • LinkedTablesResolvedTest: the check that a back-end's issues are reported under its file name, apart from the same issue of the front-end, now uses CHARSET_OVERRIDDEN (--charset windows-1253), raised for both files.
  • Comments that said Jackcess can't use the Greek catalog index now say 5.0.1 couldn't. ParentKeys' note on the missed seeks says 5.0.3 fixed the measured case; the guard stays. The CATALOG_INDEX_UNUSABLE row in the README now describes a damaged catalog index.

The catalog fallback

AccessSource's fallback stays: a damaged catalog index still hides tables. The Greek files can't exercise it any more, because Jackcess now always scans their catalog: damaging their index changes nothing.

DamagedCopy.withCatalogIndexDamaged flips one bit of an object's key in the ParentIdName index of an English file's catalog. A lookup of that name then finds nothing, while a scan still reads the row. CatalogIndexTest uses it on:

  • common1V1997.mdb and delV2003.mdb (plain);
  • db97-enc.mdb and db-enc.mdb (encoded): flipping an RC4-encoded bit flips the decoded bit, so the fallback must carry the codec provider;
  • the generated schemaFidelity.accdb, with MSysRelationships hidden: its 6 relationships are all kept.

With the fallback disabled, all six of those tests fail, and so does verifySaysWhy….

What they can't cover:

  • An AES-encrypted file: one flipped bit garbles a whole block, the entries fall out of order, and Jackcess then fails the open. That is reported as a damaged file, as before.
  • A password the fallback's second open needs: no English Jet 3/4 test file has one, and a Jet 3/4 password isn't checked on open anyway. The encoded, password-protected Greek fixture is still read whole, but without the fallback.

Other Jackcess changes checked

  • Jet 3 index lookups (5.0.3, a row past the first leaf page): the orphan checks of the Greek Northwind and the gr97 fixtures give the same counts as before.
  • Corrupt files now throwing IOException (5.0.2): AccessSource already reported both checked and unchecked exceptions as a damaged file. The DamagedCopy data-page tests and the corrupt-file tests pass unchanged.
  • New log line: Jackcess logs unsupported collating sort order … Greek for text index for Greek Access 97 files. The CLI keeps Jackcess's log quiet, so nothing reaches stderr.
  • Text charset: Jackcess 5.0.3 decodes Jet 3 text in the code page's charset. We still pass our own (Give the Access 97 charset a name of its own #46).

Checks

  • ./mvnw verify: 2865 tests, no failures.
  • ./mvnw verify -Pintegration,local-samples: 2934 unit and 1472 integration tests, no failures. That includes the Greek Access 97 Northwind, Solutions and ORDERS from samples/win98.
  • samples/mrs/Extract_MRS_V11.0.03.mdb (352 MB) in -Xmx256m:
    • JSON (12 s) and SQLite (18 s) both verified with no differences.
    • The issues are the expected 12 RELATIONSHIP_MALFORMED and 39 NO_PRIMARY_KEY.
    • The JSON, SQLite, MySQL and MariaDB outputs are byte-identical to master's (Jackcess 5.0.1).

Jackcess 5.0.2 scans a catalog whose index it can't use (a Greek Access
97 file's, for one) by itself, so the Greek fixtures no longer report
CATALOG_INDEX_UNUSABLE, and their conversions exit 0 when nothing else
warns. The source layer's fallback stays for a damaged catalog index:
DamagedCopy.withCatalogIndexDamaged flips one bit of a table's entry in
an English file's catalog index, and CatalogIndexTest checks that the
table, or MSysRelationships, is still found by scanning, plain, encoded
and with relationships. Those tests fail without the fallback.

Jackcess 5.0.3 reads a date with the coarsest rounding that converts
back to the stored double, where 5.0.1 rounded to milliseconds: the
profile of indexCodes' Table6, which stores odd doubles on purpose, now
counts 7 fraction digits. No other date in the corpus or the local
samples changes.
@clytras
clytras merged commit 1f2c2ef into master Oct 8, 2026
11 checks passed
@clytras
clytras deleted the feature/jackcess-5.0.3 branch October 8, 2026 11:46
@clytras clytras mentioned this pull request Oct 8, 2026
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.

1 participant