Sub-readable font sizes in legacy Word

doc.tiny-font

A run set to a font size at or below the readable threshold: drawn on the page, and too small for a person to read at any zoom.

How the text is hidden

Font size is a character property, stored as the SPRM sprmCHps (opcode 0x4a43) in a CHPX property run and expressed in half-points, so 20 means 10pt. Setting it to a very small value leaves the run in the text stream and in the layout, but paints it at a size nobody reads.

Why a model still reads it

Size is a rendering instruction. Extraction returns characters, not points, so a one-point run and an eleven-point run come out of the file identically.

What we do about it

readSprms records halfPoints from opcode 0x4a43 while walking the property list. invisibleReasonFor converts to points and compares against limits.subReadableMaxFontSizePt, READ FROM THE RULE PACK rather than written as a literal — the code carries the note explaining why, because this comparison was once a hard-coded number that happened to equal the bundled threshold and so made DOC the one format a pack publish could not reach. A run at or below the threshold gets invisibleReason: 'sub-readable', which visibilityOf classifies as never — rendered, and below the size at which a human reads it, at any zoom. The rule doc-sub-readable fires at severity medium, action flag: kept in the file and reported.

How often it fires

0.56% of GovDocs1 legacy .doc — real government correspondence and reports, measured 2026-08-21.

This is an alert-volume number and nothing else. It says how often the alarm sounds on documents as found — not how often it is right, and not whether what it found was harmless. Documents as found may themselves carry concealment. Read it against the population named above rather than as a property of documents in general.

next

Check your own file

Three commands: a key, credit, a verdict.

Start with the API