windmill-labs/windmill · critical
oh no
Error message
oh no
What it means
__assert_fail is the C runtime hook invoked when a C assert() fails; in the R parser WASM shim it panics with the message 'oh no' (wasm_libc.rs:292). Unlike the other stubs, reaching this means the compiled parser's internal invariant checks actually failed — the WASM code asserted something impossible and aborted. This signals a bug or corrupt input to the parser, not merely an unsupported feature.
Source
Thrown at backend/parsers/windmill-parser-r/src/wasm_libc.rs:292
_args: ...
) -> c_int {
panic!("vsnprintf is not supported");
}
#[no_mangle]
pub extern "C" fn clock_gettime(ptr: usize, new_size: usize) {
panic!("clock_gettime is not supported");
}
// int snprintf( char* restrict buffer, size_t bufsz, const char* restrict format, ... );
#[no_mangle]
pub extern "C" fn snprintf() {
panic!("snprintf is not supported");
}
#[no_mangle]
pub extern "C" fn __assert_fail(_: *const i32, _: *const i32, _: *const i32, _: *const i32) {
panic!("oh no");
}
View on GitHub (pinned to e474e8803c)
Solutions
- Isolate the exact R snippet that triggers the assertion and check whether it parses on a released Windmill version
- Upgrade or downgrade the windmill-parser-r / bundled parser to a version where the assert does not fire
- Sanitize the input (strip the offending construct) before passing it to the parser
- Report the failing input upstream — this is an internal invariant violation in the parser, not user-fixable config
Defensive patterns
Strategy: try-catch
Validate before calling
// Validate/normalize R source before parsing:
if (typeof rSource !== 'string' || rSource.trim() === '') {
throw new TypeError('rSource must be a non-empty string');
} Type guard
function isAssertFailure(e) {
return e instanceof Error && e.message === 'oh no';
} Try / catch
try {
const ast = rParser.parse(rSource);
} catch (e) {
if (isAssertFailure(e)) {
reportUpstream(rSource, e.wasmBacktrace); // internal invariant bug — capture input
return null;
}
throw e;
} Prevention
- Treat this as a parser bug: record the exact input and report it upstream
- Fuzz your R corpus against the parser version before deploying it
- Never retry the same input — the assertion failure is deterministic
- Keep the parser build updated; assertion failures are usually fixed in later releases
When it happens
Trigger: A C-level assert() inside the compiled R parser (or bundled C code) evaluates false at runtime; e.g. malformed/edge-case R source makes the parser's internal state violate an invariant.
Common situations: Parsing unusual or adversarial R snippets that break parser assumptions; a parser/library version regression; memory corruption within the WASM linear memory triggering an assertion.
Related errors
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/19932628645fddad.
Report an issue: GitHub.