FFFF Keep deeply nested form and report Blobs from overflowing the stack by dominion525 · Pull Request #156 · dominion525/jetdb · GitHub
[go: up one dir, main page]

Skip to content

Keep deeply nested form and report Blobs from overflowing the stack - #156

Merged
dominion525 merged 1 commit into
mainfrom
fix/form-tree-depth
Oct 26, 2026
Merged

dominion525 merged 1 commit into
mainfrom
fix/form-tree-depth

Conversation

@dominion525
Copy link
Copy Markdown
Owner

Summary

  • Reading the Blob of a form or report as a tree recurred on each level without a limit, in form.rs and in form2000.rs for the Access 2000 format; listing the controls and dropping the tree recurred too. A broken file nesting 10,000 levels overflowed a 1 MB stack, the stack of Wasm, which aborts the process rather than panics, so no caller can catch it.
  • Both formats now read at most 256 levels (MAX_TREE_DEPTH), the limit macro XML already has. Deeper, a Blob of Access 2002 and later is not read as a tree and its controls are found by their Name entries, as for other Blobs that do not read as a tree; a Blob of the Access 2000 format is not read, as other broken Blobs. Real forms nest a few levels.
  • jetdb form props and jetdb form controls give the same output before and after for the 557 forms and reports of the test data. New tests read both formats at the limit, one level over it and at 100,000 levels on a 1 MB stack; the deep ones aborted before.

🤖 Generated with Claude Code

- Read the tree of a Blob at most MAX_TREE_DEPTH (256) levels deep in both formats, as macro XML already is, since a broken file could nest it deep enough to overflow the stack and abort the process
- Deeper, a Blob of Access 2002 and later is not read as a tree and its controls are found by their Name entries, and a Blob of the Access 2000 format is not read, as for other bytes that do not fit the format
- Test both formats at the limit, one level over it, and at 100,000 levels on a stack of 1 MB, the stack of Wasm

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

Coverage

For f10c780.

Filename                       Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
jetdb-cli/src/export.rs            113                11    90.27%           6                 0   100.00%          65                 6    90.77%           0                 0         -
jetdb-cli/src/form.rs              239                19    92.05%          24                 5    79.17%         151                 6    96.03%           0                 0         -
jetdb-cli/src/macro_cmd.rs         117                10    91.45%           7                 2    71.43%          62                 4    93.55%           0                 0         -
jetdb-cli/src/main.rs              910                39    95.71%          82                 4    95.12%         578                28    95.16%           0                 0         -
jetdb-cli/src/prop.rs              330                18    94.55%          38                 2    94.74%         192                 7    96.35%           0                 0         -
jetdb-cli/src/query.rs              65                 3    95.38%           5                 0   100.00%          32                 0   100.00%           0                 0         -
jetdb-cli/src/vba.rs                59                 3    94.92%           5                 0   100.00%          28                 0   100.00%           0                 0         -
jetdb-wasm/src/lib.rs             3901                96    97.54%         257                 4    98.44%        2058                22    98.93%           0                 0         -
jetdb/src/catalog.rs               509                14    97.25%          46                 0   100.00%         299                 3    99.00%           0                 0         -
jetdb/src/complex.rs               924                32    96.54%          73                 0   100.00%         605                15    97.52%           0                 0         -
jetdb/src/crypto.rs               2300               112    95.13%         127                10    92.13%        1315                60    95.44%           0                 0         -
jetdb/src/csv.rs                   857                24    97.20%          72                 0   100.00%         486                 6    98.77%           0                 0         -
jetdb/src/data.rs                 4662                91    98.05%         293                 3    98.98%        2647                51    98.07%           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              2771                 8    99.71%         208                 2    99.04%        1501                 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                 1915                65    96.61%         117                 0   100.00%         983                18    98.17%           0                 0         -
jetdb/src/form.rs                 3212               128    96.01%         238                10    95.80%        1730                49    97.17%           0                 0         -
jetdb/src/form2000.rs              800                20    97.50%          62                 1    98.39%         425                 4    99.06%           0                 0         -
jetdb/src/format.rs                616                 2    99.68%          45                 0   100.00%         388                 2    99.48%           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            2440                88    96.39%         196                 9    95.41%        1596                36    97.74%           0                 0         -
jetdb/src/macro_text.rs            804                24    97.01%          54                 2    96.30%         451                20    95.57%           0                 0         -
jetdb/src/map.rs                   416                13    96.88%          27                 0   100.00%         221                 5    97.74%           0                 0         -
jetdb/src/money.rs                 281                 0   100.00%          26                 0   100.00%         186                 0   100.00%           0                 0         -
jetdb/src/prop.rs                 1375                18    98.69%          90                 0   100.00%         695                10    98.56%           0                 0         -
jetdb/src/query.rs                2514                62    97.53%         200                 1    99.50%        1550                18    98.84%           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               764                32    95.81%          57                 0   100.00%         434                 6    98.62%           0                 0         -
jetdb/src/table.rs                1679                67    96.01%         109                 2    98.17%        1017                18    98.23%           0                 0         -
jetdb/src/timestamp.rs             405                 0   100.00%          44                 0   100.00%         235                 0   100.00%           0                 0         -
jetdb/src/vba.rs                   949                57    93.99%          82                11    86.59%         540                21    96.11%           0                 0         -
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                            37616              1128    97.00%        2750                74    97.31%       21495               482    97.76%           0                 0         -

@dominion525
dominion525 merged commit 0e337b6 into main Oct 26, 2026
21 of 22 checks passed
@dominion525
dominion525 deleted the fix/form-tree-depth branch October 26, 2026 16:14
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