fix: guard drawing export against invalid structures and zero IDs (SD-824)#2363
fix: guard drawing export against invalid structures and zero IDs (SD-824)#2363caio-pizzol wants to merge 1 commit intomainfrom
Conversation
…-824) - Add guard in drawing-translator decode to skip w:drawing wrap when child is not wp:inline or wp:anchor (prevents corrupt OOXML) - Add guard in translateInlineNode to bail when translateImageNode returns a non-drawing result (e.g. text fallback for invalid signatures) - Add same guard in translateAnchorNode for parity - Generate positive random IDs for wp:docPr and pic:cNvPr instead of defaulting to 0 (violates OOXML uniqueness requirement per §20.4.2.5) - Ensure both elements share the same generated ID per image
|
Status: PASS The changes are spec-compliant. Here's what I verified against ECMA-376:
The PR fixes the previous The generated fallback uses Shared §20.4.2.5 and §20.2.2.3 both say IDs must be unique within the document, but sharing the same ID between
The guard that only wraps
|
Supersedes #1271 — rebased onto current main and incorporates review feedback.
w:drawingwrap when child is notwp:inlineorwp:anchor, preventing corrupt OOXML whentranslateImageNodefalls back to a text run (e.g., invalid signature data)wp:inline/wp:anchorconstruction whentranslateImageNodereturns a non-drawing result (missingwp:extent)wp:docPrandpic:cNvPrinstead of defaulting to0, which violates OOXML uniqueness requirements (ECMA-376 §20.4.2.5)OOXML compliance
wp:docPr/@idid=0passes XSD but violates uniqueness when multiple objects default to itw:drawingchildrenwp:inlineandwp:anchorare standard childrenwp:inlinerequired childrenwp:extentis mandatory inCT_InlinesequenceChanges from #1271
!==check instead ofSet(review feedback)wp:extentcheck covers all cases (review feedback)Math.max(1, ...)to prevent theoreticalid=0fromparseInt(review feedback)drawingIdonce, shared by bothbuildDocPrElementandbuildNvPicPrElementwp:extentin mock dataTest plan
drawing-translator.test.js— 12 tests pass (guard + existing)drawing-guards.test.js— 7 new tests (inline guard, anchor guard, ID generation)translate-anchor-node.test.js— 30 tests pass (mock updated for guard)