DSi browser limits and failure modes

Practical constraints seen in historical Flipnote Hatena page tests.

In the wiki's browser tests, CSS was limited to 256 selectors and selector names effectively stopped after twelve characters. The client reportedly ignored characters beyond that point. Other builds may behave differently, so keep CSS small and test it on the version you intend to support. [1]

Known parsing and layout hazards

Observed conditionEffect and interpretation
A table cell spans a second row that does not exist.The cell can still render while its table contributes no height. Later page content may appear underneath it, and the overlap is missing from the calculated scroll length.
The HTML response has no <body> element.The loading frog can continue indefinitely. In a separate malformed-head case, metadata inside an unusually placed body was still read.
Metadata precedes the opening <html> element but remains before the head's closing tag.At least one tested build still used it. A standards-compliant desktop parser is therefore not an exact model of this client.
An NPF image is requested with larger HTML dimensions than its bytes provide.Other image-cache contents can become visible. NPF stores no dimensions of its own, making the requested geometry important.
A null-filled linked text file is read.The previous text cache may remain visible instead of being replaced by new text.
An invalid or absent local PPM path is selected with an SD card inserted.A top-screen glitch was observed, but the wiki does not establish whether raw SD bytes or memory were displayed.
An unexpected character reaches the UGO menu parser.A crash was reported in a historical DSiBrew/PBSDS observation; its precise parser state is not established here.

Avoid relying on these failures for layout. Service responses should have a well-formed body, sensible resource-size limits, complete image data and known UGO records. If a page hangs or renders incorrectly, keep the exact response bytes and client revision. Some apparent over-reads remain uncertain in the wiki; screen corruption alone cannot show which memory was read. [2]

When a page hangs, first test a minimal body and add controls back one by one. Record the exact DSi build and response bytes before assigning a failure to CSS, parsing, image storage or action continuation. [1][2]

Layout details behind the table-height failure

The wiki's tested browser did not support CSS position or float. Negative margins could make content overlap, but required knowing its rendered height. A separate test used rowspan="2" in a table with only one row. The client drew the cell but gave the table zero height, allowing later content to appear underneath it without extending the scroll range. Avoid this failure by including every row covered by a span. [2]

Handling malformed HTML

  • With no body element, the report describes the loading frog spinning indefinitely.
  • In a separate malformed document, a body placed inside the head was accepted; metadata inside that body was still processed.
  • Metadata placed before the opening HTML element was also processed when it preceded the closing head tag.

These tests do not establish a general rule for where the client accepts tags, or show that it uses a modern browser's HTML error recovery. Write a normal head followed by a body, then test every supported resource type on the target build. [2]

Cache and local-file observations

Reported behaviourEvidence boundaryDefensive consequence
Oversized display geometry on an NPF exposes neighbouring cached image dataNPF has no embedded dimensions. Each indexed pixel represents one four-bit nibble. The report used a small multi-colour image; visual results were interpreted as image-cache bytes.Validate the display dimensions against the available pixel payload and palette before rendering. A missing byte must not become a read from adjacent cache storage.
A linked file containing only 0x00 bytes leaves earlier text visibleThe report observed old text through the selected file extent and tested a 100,000-byte text file. It also reports a larger-size limit that produces an error, without identifying the threshold.Bound text reads, initialise the output buffer and treat a zero character as data or a terminator according to an explicit format rule. Do not display stale buffer contents.
A missing SD PPM with an invalid filename causes a top-screen image glitchAn inserted SD card was a prerequisite in the report. The display used only PPM colours. Whether the source was RAM, raw card data or another buffer was not determined.Validate both the pathname and file-open result before PPM decoding; never interpret a failed read as a usable animation buffer.
An unexpected character crashes the UGO parserThe wiki attributes this to PBSDS and links an earlier DSiBrew report and hatena-server issue. It supplies no complete character/record/build matrix.Reject malformed records in a modern parser and retain the exact failing fixture and client version for regression testing.

The image experiment supplied a 1 × 15 resource while declaring a 128 × 1024 display area. These were test dimensions, not supported image sizes or a reliable layout method. No malformed test file is embedded here or sent to a device. Likewise, the 100,000-byte text test does not show that every smaller file is safe. [2]

The UGO report links to hatena-server issue 3 and the DSiBrew exploit catalogue. These identify the original report; they do not show an independent reproduction for every Studio release. [2]

Sources

  1. [1] Flipnote Studio Docs wiki — Web Browser Notes
  2. [2] Flipnote Studio Docs wiki — Exploits and bugs

← All documentation