{"record":{"id":"7bcafa7dbf386f64","repo":"Hmbown/CodeWhale","slug":"android-authority-reported-non-absolute-loaded-i","errorCode":null,"errorMessage":"Android {authority} reported non-absolute loaded-image path `{}`","messagePattern":"Android (.+?) reported non-absolute loaded-image path `(.+?)`","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/cli/src/update.rs","lineNumber":481,"sourceCode":"            \"Android loaded image `{}` is not an executable regular file; refusing to select an update target\",\n            resolved_mapping.display()\n        );\n    }\n\n    validate_android_mapping_identity(&mapping, &resolved_mapping)?;\n    Ok(AndroidExecutableProof {\n        path: resolved_mapping,\n        device_major: mapping.device_major,\n        device_minor: mapping.device_minor,\n        inode: mapping.inode,\n        proof_kind: AndroidExecutableProofKind::DladdrAndProcMaps,\n    })\n}\n\n#[cfg(any(target_os = \"android\", all(test, unix)))]\nfn validate_android_reported_path(authority: &str, path: &Path) -> Result<()> {\n    if !path.is_absolute() {\n        bail!(\n            \"Android {authority} reported non-absolute loaded-image path `{}`\",\n            path.display()\n        );\n    }\n    if path.to_string_lossy().ends_with(\" (deleted)\") {\n        bail!(\n            \"Android {authority} reported deleted loaded image `{}`\",\n            path.display()\n        );\n    }\n    if is_android_linker_name(path) {\n        bail!(\n            \"Android {authority} identifies runtime linker `{}`; refusing to use the linker as an update target\",\n            path.display()\n        );\n    }\n    Ok(())\n}","sourceCodeStart":463,"sourceCodeEnd":499,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/cli/src/update.rs#L463-L499","documentation":"Each Android path authority (dladdr and /proc/self/maps) must report an absolute path for the loaded image; the updater canonicalizes it later and can only reason about absolute locations. If dladdr or a maps row yields a relative path (which well-formed authorities never should), the updater rejects it rather than resolving against an unknown working directory.","triggerScenarios":"validate_android_reported_path, called from android_loaded_executable_proof_report, when the dladdr-reported path or the path column of the matching /proc/self/maps row is not absolute.","commonSituations":"dladdr returning an unexpected value because the marker is not actually in a loaded file-backed image; a hand-edited or synthetic maps text in tests; embedding the binary in a nonstandard loader that reports relative paths.","solutions":["Run the updater as a normally loaded executable so dladdr/maps report real absolute paths.","Check that the binary is file-backed on disk (not an anonymous/memfd mapping); copy it to storage and exec from there.","If this appears in tests, fix the fixture: maps/dladdr fixtures must use absolute paths.","Report the environment upstream if a legitimate loader produces relative dladdr paths — the check may need relaxing for that loader."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"fn ensure_absolute(p: &std::path::Path) -> anyhow::Result<()> {\n    anyhow::ensure!(p.is_absolute(), \"reported path {:?} is not absolute\", p);\n    Ok(())\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run the binary as a normally loaded, file-backed executable.","Do not use memfd or anonymous mappings for the updater binary.","Validate fixtures in tests use absolute paths.","Treat non-authoritative loader environments as unsupported for self-update."],"tags":["android","self-update","path-validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}