Skip to content

Upstream repros

Generated from repros/README.md when the site was built at 7aa23e2.

Minimal standalone repros of the upstream bugs niso works around, and of the layout bugs the Acid tests found (tests/acid). Each directory is its own cargo project depending directly on the upstream crate at niso’s pinned revision (blitz be60597, stylo 2dca345, parley through the oofdere/parley fork 00cbfc6, or plain parley 0.12.0 where the fork already has the fix). cargo run exits 1 while the bug reproduces. Each README says what niso does about it, expected against actual, whether the crate’s current main still has it, any existing issue or PR, and an issue text ready to file. None has been filed. ios-chronod-dismissed-activity-reload-loop is an iOS app rather than a cargo project: its repro.sh runs it on a simulator and exits 1 while the bug reproduces.

The porffor-* directories are JS repros described in docs/engines/porffor.md. quickjs-date-now-hook is a patch rather than a repro: it adds JS_SetDateNowFunc to QuickJS-ng so Date can read niso’s clock, with a test.sh that applies it to a scratch copy and runs QuickJS-ng’s api-test.

Repro Bug Upstream main Issue or PR
blitz-dom-bounding-rect-fixed-scroll get_client_bounding_rect moves position: fixed boxes with the viewport scroll reproduces none
blitz-dom-bounding-rect-scroller-own-offset get_client_bounding_rect moves a scroller’s own box by its scroll offset reproduces none
blitz-dom-child-list-quadratic removing or moving a node costs O(siblings) (index_of_child, then retain), so n removals or moves cost n² same code on main none; DioxusLabs/blitz#1232 (open) caches the index only
blitz-dom-animation-state-hidden-by-canvas with a <canvas src>, nothing public tells whether CSS animations need ticks; may_have_animations stays set for paused, forwards-filled and finished ones not checked none searched
blitz-dom-cssom-inline-style-round-trip no inline-style edit keeps both: style_attr_set_property + set_attribute reparses the six-digit serialization, set_style_property leaves the style attribute stale same code on main none
blitz-dom-focussed-node-root-fallback get_focussed_node_id returns the root element when nothing has focus reproduces none
blitz-dom-hit-ignores-clips Node::hit finds boxes that overflow clips and clip-path hide same code on main none
blitz-dom-hidden-containing-block-keeps-hoisted a containing block laid out as display: none keeps its hoisted out-of-flow boxes, so layout panics (“invalid SlotMap key used”) once one is freed same code on main none
blitz-dom-inline-keeps-layout-children an element with children restyled from a box (block, inline-block, flow-root) to inline keeps layout children whose layout_parent is the inline root, so debug builds panic in resolve not checked none searched
blitz-dom-inline-rect-line-height an inline’s rect has the line box’s height, not its content area’s reproduces none
blitz-dom-inline-rect-trailing-space an inline’s rect includes the space hanging at the end of a wrapped line reproduces none for rects; DioxusLabs/blitz#1009 for painting
blitz-dom-legend-not-rendered a fieldset’s legend is laid out as a full-width block inside the border, not a shrink-to-fit rendered legend on it not checked none searched
blitz-dom-namespaced-attribute-special-cased attributes in a namespace get the special handling (style, id, class…) of the same-named attribute in no namespace reproduces none; DioxusLabs/blitz#1292 fixes open only
blitz-dom-no-step-between-style-and-layout no public step between styling and layout, so every resolve restyles animating elements before laying out an embedder’s style edits (niso’s text scale); includes a patch, and niso’s side of it not checked none searched
blitz-dom-outer-html-serialization outer_html drops comments and template contents, writes <p /> reproduces DioxusLabs/blitz#1204 fixes part
blitz-dom-overflow-propagation the body’s overflow doesn’t propagate to the viewport, so the body scrolls and clips instead of the document; overflow-propagation.patch fixes it reproduces (by inspection) none
blitz-dom-quirks-mode-ignored the doctype’s quirks mode is never applied reproduces none
blitz-dom-subtree-walk-recursive iter_subtree_mut recurses per level, so connecting or removing a ~100k-deep subtree overflows an 8 MiB stack same code on main none
blitz-dom-table-anonymous-boxes non-table-internal children of a table are dropped reproduces DioxusLabs/blitz#1430; fixed by #1370 (open)
blitz-dom-table-cell-row-height cells are not stretched to their row’s height reproduces fixed by DioxusLabs/blitz#1370 (open)
blitz-dom-table-row-box rows and row groups have no box reproduces fixed by DioxusLabs/blitz#1370 (open)
blitz-html-doctype-dropped the doctype is dropped; no DocumentType node reproduces none
fontique-android-roboto-flex-generic Android sans-serif and system-ui are Roboto Flex, not Roboto same code (needs a device) none
html5ever-p-in-button-scope-quadratic each block start tag walks the whole stack of open elements, so nested <div>s parse in O(depth²) fixed (servo/html5ever#811 caps the stack at 512), unreleased servo/html5ever#811
icu-segmenter-non-complex-warns the new_for_non_complex_scripts segmenters print “No segmentation model” to stderr for every CJK or Southeast Asian run in debug builds same code on main linebender/parley#623 (parley side); none in ICU4X
ios-chronod-dismissed-activity-reload-loop after a restart, chronod keeps reloading a Live Activity the app ended before SpringBoard’s restored scene subscribed (“Could not find a descriptor”), retrying every ~10.7 minutes reproduces on iOS 27.0 (24A434), simulator none; Feedback not filed
parley-strut-zero-height-inline-box a line holding only a zero-height inline box gets no strut fixed (linebender/parley#902), unreleased linebender/parley#902
parley-trak-scaled-point-size trak looked up at the device-scaled size fixed (linebender/parley#942), unreleased linebender/parley#942
porffor-local-module-pulls-node-runtime a local named module compiles in Porffor’s Node runtime (module system, Buffer, url with ada), and the native program exits 1 with ReferenceError: module#… is not defined not checked (alpha 22 is the newest release) none
rust-url-wpt-url-spec-gaps url 2.5.8 differs from the URL Standard: ASCII domains, opaque-path trailing spaces, file hosts, blob origins, /// reproduces; ASCII domains fixed by servo/rust-url#1170 (open), part of file URLs by #1166 (open) servo/rust-url#1170, #1166, #1164, #504; none for opaque paths or blob origins
stylo-app-units-per-device-pixel-truncated servo’s app units per device pixel truncate (22 at ratio 2.625, Gecko 23), so a 3px border is 2.933px same code on main none
stylo-accent-color-gecko-only accent-color is engine = "gecko", so servo drops it reproduces none
stylo-color-animation-weights-cancel a colour animated at progress 2^31 gets f32 weights that sum to 0, and mix_many returns the start colour reproduces none
stylo-dir-pseudo-class-gecko-only :dir() is Gecko-only, so servo-engine selectors with it fail to parse reproduces none
stylo-servo-viewport-variants-and-safe-area servo resolves sv*, lv* and dv* like vh and its env(safe-area-inset-*) is always 0, with no MediaData input for either, so a viewport-fit=cover page cannot find the safe area or the viewport the bars leave it; includes a patch same code on main none
stylo-servo-user-preference-media-features servo has no prefers-reduced-motion, prefers-reduced-transparency or prefers-contrast, and its system colors (AccentColor…) are hard-coded with no embedder input; includes a patch reproduces servo/stylo#288 (approved, stale; predates MediaData), servo/stylo#477; none for system colors