diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2026-09-07 21:48:12 -0400 |
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2026-09-09 17:33:08 -0400 |
| commit | 4c8bf098bdbcf8d348519fa36b91cd0312f479a3 (patch) | |
| tree | 53779344b440dc6c7e197f5f793d35a2b695e8c9 /src | |
| parent | ocda: a reader for .ssp, and a round trip check (diff) | |
ocda: the eight slot arrays are fixed length
markedup_ancestors, collapsed_ancestors, the two dom status arrays
and heading_ancestors_text were declared as int[] / string[] with
a literal default:
int[] markedup_ancestors = [ 0, 0, 0, 0, 0, 0, 0, 0, ];
which is one array, shared by every default constructed object:
write into one by index and you write into all of them. They are
now int[8] / string[8], where that is impossible.
Output neutral confirmed by reference test.
Provides a fix: Previously the parser always assigned these whole
and with .dup so it never went through the shared array. This left
a trap in previous code which caught the new .ssp reader, whose
first version wrote by index and gave every object in a document
the last one's ancestors.
(assisted by Claude-Code)
Diffstat (limited to 'src')
| -rw-r--r-- | src/sisudoc/ocda/meta/metadoc_object_setter.d | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/sisudoc/ocda/meta/metadoc_object_setter.d b/src/sisudoc/ocda/meta/metadoc_object_setter.d index e7ff88b..ba2f268 100644 --- a/src/sisudoc/ocda/meta/metadoc_object_setter.d +++ b/src/sisudoc/ocda/meta/metadoc_object_setter.d @@ -89,7 +89,7 @@ template ObjectSetter() { int heading = 0; } struct DocObj_Tags_ { - string[] heading_ancestors_text = [ "", "", "", "", "", "", "", "", ]; + string[8] heading_ancestors_text; // fixed: a dynamic array with a literal default is shared by every default constructed object string anchor_tag_html = ""; string in_segment_html = ""; string segment_anchor_tag_epub = ""; @@ -178,10 +178,10 @@ template ObjectSetter() { int heading_lev_markup = 9; int heading_lev_collapsed = 9; bool dummy_heading = false; - int[] markedup_ancestors = [ 0, 0, 0, 0, 0, 0, 0, 0,]; - int[] collapsed_ancestors = [ 0, 0, 0, 0, 0, 0, 0, 0,]; - int[] dom_structure_markedup_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,]; - int[] dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,]; + int[8] markedup_ancestors; // fixed length: one slot per heading level + int[8] collapsed_ancestors; + int[8] dom_structure_markedup_tags_status; + int[8] dom_structure_collapsed_tags_status; int parent_lev_markup = 0; int parent_ocn = 0; int last_descendant_ocn = 0; |
