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

  1. Isolate the exact R snippet that triggers the assertion and check whether it parses on a released Windmill version
  2. Upgrade or downgrade the windmill-parser-r / bundled parser to a version where the assert does not fire
  3. Sanitize the input (strip the offending construct) before passing it to the parser
  4. 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

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.