Skip to content

Refactor task.rs error handling to clarify non-panic error propagation#2094

Closed
KCarretto wants to merge 1 commit intomainfrom
fix/assets-copy-error-handling-10654379505299874921
Closed

Refactor task.rs error handling to clarify non-panic error propagation#2094
KCarretto wants to merge 1 commit intomainfrom
fix/assets-copy-error-handling-10654379505299874921

Conversation

@KCarretto
Copy link
Copy Markdown
Collaborator

This change addresses the perceived bug where assets.copy errors were supposedly not reported to the server.

The underlying issue:

std::panic::catch_unwind returns an Ok(T) if the closure executes without a panic. In the previous implementation, T was Result<Value, String>. Therefore, a normal assets.copy() error yielded Ok(Err("asset not found")). The match result { Ok(exec_result) => report_result(...) } block correctly handled this by passing the Err to report_result, which properly formulated and transmitted the TaskError to the C2 server.

However, because the failing task fell into the Ok branch of the match statement, it created the illusion that non-panic errors were being ignored or improperly handled.

The fix:

To eliminate this ambiguity and ensure panic/error handling is unmistakably transparent, the catch_unwind result is now flattened via .unwrap_or_else(|e| Err(format!("panic: {:?}", e))). This consolidates both panic payloads and script EldritchErrors into a single, clean Result<Value, String>. The report_result function then processes the outcome unconditionally, preserving graceful degradation and accurate server reporting. Unused panic-specific helper functions have been removed.


PR created automatically by Jules for task 10654379505299874921 started by @KCarretto

…ndling

The `std::panic::catch_unwind` block previously returned a confusing nested `Result` type, leading to the misinterpretation that non-panic errors (such as those returned by `assets.copy()`) were being swallowed or incorrectly reported as success due to falling into the `Ok(exec_result)` match arm. This commit flattens the result using `.unwrap_or_else()` so that both caught panics and standard interpreter errors evaluate directly to an `Err(String)`. A single `report_result` invocation replaces the redundant `match` block, ensuring all failures are unmistakably and gracefully propagated to the server as a `TaskError`. Redundant panic reporting helpers were also removed.

Co-authored-by: KCarretto <16250309+KCarretto@users.noreply.github.com>
@google-labs-jules
Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@github-actions
Copy link
Copy Markdown
Contributor

Summary

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Other ❓ Flaky 🍂 Duration ⏱️
2826    ±0 2826    ±0 0    ±0 0    ±0 0    ±0 0    ±0 1ms    ±0

Previous Results

Build 🏗️ Result 🧪 Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Other ❓ Flaky 🍂 Duration ⏱️
#1749 2826 2826 0 0 0 0 40.0s

Insights

Average Tests per Run Total Flaky Tests Total Failed Slowest Test (p95)
2826 0 0 5.6s

Slowest Tests

Test 📝 Results 📊 Duration (avg) ⏱️ Duration (p95) ⏱️
TestDockerExecutor_Build_ContextCancellation 1 5.6s 5.6s
eldritch-libsys: std::dll_inject_impl::tests::test_dll_inject_simple 1 5.2s 5.2s
imix::bin/imix: install::tests::test_install_execution 3 1.8s 5.1s
imix::bin/imix: install::tests::test_install_execution 3 1.8s 5.1s
imix::bin/imix: install::tests::test_install_execution 3 1.8s 5.1s
TestInteractiveShell 1 5.0s 5.0s
TestOtherStreamOutput 1 5.0s 5.0s
imix::bin/imix: tests::task_tests::test_task_streaming_error 3 3.0s 3.0s
imix::bin/imix: tests::task_tests::test_task_streaming_error 3 3.0s 3.0s
imix::bin/imix: tests::task_tests::test_task_streaming_error 3 3.0s 3.0s

🎉 No failed tests in this run. | 🍂 No flaky tests in this run.

Github Test Reporter by CTRF 💚

@KCarretto KCarretto closed this Mar 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant