8000 Take a DirData entry without a null as broken, rather than read its name one byte off by dominion525 · Pull Request #132 · dominion525/jetdb · GitHub
[go: up one dir, main page]

Skip to content

Take a DirData entry without a null as broken, rather than read its name one byte off - #132

Merged
dominion525 merged 2 commits into
mainfrom
fix/dir-data-without-a-null
Oct 25, 2026
Merged

dominion525 merged 2 commits into
mainfrom
fix/dir-data-without-a-null

Conversation

@dominion525
Copy link
Copy Markdown
Owner

Summary

  • When the declared length of a DirData entry was too short, parse_dir_data looked for the null after it. When it found none before the end of the data, it took the end of the entry to be one past the data, and read the name one byte off, which mostly ended in an error of an invalid UTF-16LE name. Such an entry is now taken as broken, and parse_dir_data stops at it, as it does at another marker or at a declared length that goes past the data. The entries before it are kept.
  • The 557 DirData entries of the test data all end with a null at their declared length, so none of them is read differently.
  • The start and end of the payload of the next entry are found by a function of their own, which leaves the loop over the entries to read each payload.
  • The tests of parse_dir_data in form.rs are kept in storage.rs, where the function is: the header alone and data too short for it are checked in one test, and the test of one plain entry is dropped, as the test of two entries covers it.
  • Functions above the thresholds: 100, as before (parse_dir_data: 8 / 9 / 28 → 5 / 4 / 15). Tests: 1114 → 1112.

🤖 Generated with Claude Code

dominion525 and others added 2 commits October 25, 2026 12:38
- Drop the three tests of form.rs, and check the header alone and data too short for it in one test of storage.rs
- Drop the test of one plain entry, which the test of two entries in storage.rs covers

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ame one byte off

- Stop at an entry whose declared length is too short and which has no null before the end of the data; its end was taken to be one past the data, and its name was read one byte off
- Find the start and end of the payload of the next entry in a function of its own, which shortens the loop over the entries

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Coverage

For 847e9ff.

Filename                       Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
jetdb-cli/src/export.rs            108                11    89.81%           5                 0   100.00%          66                 6    90.91%           0                 0         -
jetdb-cli/src/form.rs              254                24    90.55%          19                 5    73.68%         152                 9    94.08%           0                 0         -
jetdb-cli/src/macro_cmd.rs         151                11    92.72%          11                 2    81.82%          81                 5    93.83%           0                 0         -
jetdb-cli/src/main.rs              864                38    95.60%          70                 2    97.14%         549                25    95.45%           0                 0         -
jetdb-cli/src/prop.rs              308                15    95.13%          33                 2    93.94%         186                10    94.62%           0                 0         -
jetdb-cli/src/query.rs              80                 4    95.00%           5                 0   100.00%          51                 1    98.04%           0                 0         -
jetdb-cli/src/vba.rs                74                 4    94.59%           5                 0   100.00%          47                 1    97.87%           0                 0         -
jetdb-wasm/src/lib.rs             3871                95    97.55%         252                 4    98.41%        2031                22    98.92%           0                 0         -
jetdb/src/catalog.rs               509                14    97.25%          46                 0   100.00%         299                 3    99.00%           0                 0         -
jetdb/src/complex.rs               917                32    96.51%          73                 0   100.00%         607                15    97.53%           0                 0         -
jetdb/src/crypto.rs               2300               112    95.13%         127                10    92.13%        1315                60    95.44%           0                 0         -
jetdb/src/csv.rs                   810                23    97.16%          65                 0   100.00%         453                 6    98.68%           0                 0         -
jetdb/src/data.rs                 4560               179    96.07%         257                 3    98.83%        2564               110    95.71%           0                 0         -
jetdb/src/ddl/access.rs             70                 0   100.00%           7                 0   100.00%          46                 0   100.00%           0                 0         -
jetdb/src/ddl/mod.rs              2777                 8    99.71%         199                 2    98.99%        1503                 6    99.60%           0                 0         -
jetdb/src/ddl/mysql.rs              70                 0   100.00%           7                 0   100.00%          46                 0   100.00%           0                 0         -
jetdb/src/ddl/postgres.rs           71                 0   100.00%           7                 0   100.00%          46                 0   100.00%           0                 0         -
jetdb/src/ddl/sqlite.rs             69                 0   100.00%           7                 0   100.00%          48                 0   100.00%           0                 0         -
jetdb/src/encoding.rs              284                 0   100.00%          30                 0   100.00%         153                 0   100.00%           0                 0         -
jetdb/src/file.rs                 1914                67    96.50%         110                 0   100.00%        1042                26    97.50%           0                 0         -
jetdb/src/form.rs                 3225               150    95.35%         230                10    95.65%        1752                69    96.06%           0                 0         -
jetdb/src/form2000.rs              762                21    97.24%          56                 1    98.21%         402                 4    99.00%           0                 0         -
jetdb/src/format.rs                620                 2    99.68%          41                 0   100.00%         408                 2    99.51%           0                 0         -
jetdb/src/lib.rs                     3                 0   100.00%           1                 0   100.00%           3                 0   100.00%           0                 0         -
jetdb/src/macro_action.rs          299                19    93.65%          27                 3    88.89%         165                24    85.45%           0                 0         -
jetdb/src/macro_def.rs            2350                98    95.83%         179                 9    94.97%        1522                46    96.98%           0                 0         -
jetdb/src/macro_text.rs            783                24    96.93%          49                 2    95.92%         437                20    95.42%           0                 0         -
jetdb/src/map.rs                   416                13    96.88%          27                 0   100.00%         221                 5    97.74%           0                 0         -
jetdb/src/money.rs                 286                 0   100.00%          26                 0  
A271
 100.00%         189                 0   100.00%           0                 0         -
jetdb/src/prop.rs                 1398                56    95.99%          88                 8    90.91%         735                63    91.43%           0                 0         -
jetdb/src/query.rs                2587                71    97.26%         188                 1    99.47%        1625                35    97.85%           0                 0         -
jetdb/src/relationship.rs          249                26    89.56%          22                 0   100.00%         177                10    94.35%           0                 0         -
jetdb/src/save_as_text.rs          574                27    95.30%          52                 3    94.23%         341                27    92.08%           0                 0         -
jetdb/src/storage.rs               712                31    95.65%          48                 0   100.00%         386                 6    98.45%           0                 0         -
jetdb/src/table.rs                1632                61    96.26%         100                 2    98.00%         965                18    98.13%           0                 0         -
jetdb/src/timestamp.rs             413                 0   100.00%          43                 0   100.00%         232                 0   100.00%           0                 0         -
jetdb/src/vba.rs                   634                65    89.75%          54                16    70.37%         361                60    83.38%           0                 0         -
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                            37004              1301    96.48%        2566                85    96.69%       21206               694    96.73%           0                 0         -

@dominion525
dominion525 merged commit 74ddc20 into main Oct 25, 2026
11 checks passed
@dominion525
dominion525 deleted the fix/dir-data-without-a-null branch October 25, 2026 03:45
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

0