{"record":{"id":"32e07dbd82a1098d","repo":"rustdesk/rustdesk","slug":"wayland-socket-probe-answered-a-malformed-list-e","errorCode":null,"errorMessage":"wayland socket probe answered a malformed list: {err}","messagePattern":"wayland socket probe answered a malformed list: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"libs/base/src/platform/linux/wayland_probe.rs","lineNumber":258,"sourceCode":"    let mut lines = stdout.lines();\n    if lines.next() != Some(WAYLAND_PROBE_MAGIC) {\n        // Not a probe: the binary ran its normal startup. Latch, or this path would spawn one\n        // full consumer process per enumeration cycle.\n        PROBE_UNSUPPORTED.store(true, Ordering::Release);\n        bail!(\"this binary does not dispatch {WAYLAND_DISPLAY_PROBE_ARG}; probe disabled\");\n    }\n    if !status.success() {\n        let detail = stderr.trim();\n        if detail.is_empty() {\n            // panic=abort or a signal leaves stderr empty; the status is then the only cause.\n            bail!(\"wayland socket probe failed: {status}\");\n        }\n        bail!(\"wayland socket probe failed ({status}): {detail}\");\n    }\n    let displays: Vec<WaylandDisplayInfo> =\n        match serde_json::from_str(lines.next().unwrap_or_default()) {\n            Ok(displays) => displays,\n            Err(err) => bail!(\"wayland socket probe answered a malformed list: {err}\"),\n        };\n    // The child already refuses an empty list; refuse it here too, so a truncated pipe cannot\n    // become a cached-for-life empty enumeration.\n    if displays.is_empty() {\n        bail!(\"wayland socket probe returned no outputs\");\n    }\n    log::debug!(\n        \"wayland: {} output(s) via the probe subprocess\",\n        displays.len()\n    );\n    Ok(displays)\n}\n\n/// Everything already buffered in the pipe, read strictly non-blocking and capped: a descendant\n/// that escaped the probe's process group can hold a write end open, so a blocking read (even\n/// after the child exits) could hang the enumeration forever. `None` means the pipe could not be\n/// INSPECTED (missing handle or fcntl failure) and must not be read as evidence of anything;\n/// `Some` is whatever bytes were buffered, whether or not EOF arrived.","sourceCodeStart":240,"sourceCodeEnd":276,"githubUrl":"https://github.com/rustdesk/rustdesk/blob/91c9fccbb0f7bfe5f11644d5fbdec9b23fa10540/libs/base/src/platform/linux/wayland_probe.rs#L240-L276","documentation":"The probe ran to success but its JSON output line could not be deserialized into Vec<WaylandDisplayInfo>, meaning the child's answer was corrupted or produced by an incompatible probe version — the parent refuses to accept a list it cannot parse.","triggerScenarios":"Thrown at libs/base/src/platform/linux/wayland_probe.rs:258 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check for a version mismatch between the parent binary and the probe serialization format","Retry the probe; a corrupted pipe read may be transient","Inspect the raw stdout line that failed parsing","Rebuild/reinstall so the child and parent share the same WaylandDisplayInfo schema"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"91c9fccbb0f7bfe5f11644d5fbdec9b23fa10540","analyzedAt":"2026-09-10T19:53:44.083Z","contentChangedAt":"2026-09-10T19:53:44.083Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}