mirror of
https://github.com/openai/codex.git
synced 2026-11-05 20:10:33 +00:00
## Why `codex exec --output-last-message` wrote through a pathname after tools finished, allowing sandbox activity to redirect the final write by replacing that path with a symlink. The related risk is described in https://github.com/openai/codex/pull/25956. ## What changed - Open the destination before starting the agent and retain its handle until the final write. - Reject symlinks, Windows reparse points, and multiply linked files; verify that the pathname still identifies the bound file before truncating and after writing. - Propagate output errors so the command fails when the destination cannot be opened or written safely. - Preserve inherited Unix output streams, FIFOs, devices, and Windows `NUL` support, while avoiding duplicate final answers when human output targets stdout. ## Testing Add regression coverage for sandbox-created symlinks across consecutive invocations, redirected stdout, delayed truncation, hard links, replaced paths, and Windows stream binding and filesystem identity checks. GitOrigin-RevId: 4a31bd28a5eb2d0a9e200cb658eb7d19dc93e933
87 lines
2.4 KiB
TOML
87 lines
2.4 KiB
TOML
[package]
|
|
name = "codex-exec"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
autotests = false
|
|
|
|
[[bin]]
|
|
name = "codex-exec"
|
|
path = "src/main.rs"
|
|
|
|
[lib]
|
|
name = "codex_exec"
|
|
path = "src/lib.rs"
|
|
doctest = false
|
|
|
|
[[test]]
|
|
name = "all"
|
|
path = "tests/all.rs"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[dependencies]
|
|
anyhow = { workspace = true }
|
|
clap = { workspace = true, features = ["derive"] }
|
|
codex-arg0 = { workspace = true }
|
|
codex-app-server-client = { workspace = true }
|
|
codex-app-server-protocol = { workspace = true }
|
|
codex-cloud-config = { workspace = true }
|
|
codex-config = { workspace = true }
|
|
codex-core = { workspace = true }
|
|
codex-exec-server = { workspace = true }
|
|
codex-features = { workspace = true }
|
|
codex-feedback = { workspace = true }
|
|
codex-git-utils = { workspace = true }
|
|
codex-history = { workspace = true }
|
|
codex-login = { workspace = true }
|
|
codex-model-provider-info = { workspace = true }
|
|
codex-otel = { workspace = true }
|
|
codex-protocol = { workspace = true }
|
|
codex-rollout = { workspace = true }
|
|
codex-utils-absolute-path = { workspace = true }
|
|
codex-utils-cli = { workspace = true }
|
|
codex-utils-oss = { workspace = true }
|
|
codex-utils-path-uri = { workspace = true }
|
|
codex-utils-sandbox-summary = { workspace = true }
|
|
codex-worktree = { workspace = true }
|
|
owo-colors = { workspace = true }
|
|
serde = { workspace = true, features = ["derive"] }
|
|
serde_json = { workspace = true }
|
|
supports-color = { workspace = true }
|
|
tokio = { workspace = true, features = [
|
|
"io-std",
|
|
"macros",
|
|
"process",
|
|
"rt-multi-thread",
|
|
"signal",
|
|
] }
|
|
tracing = { workspace = true, features = ["log"] }
|
|
tracing-subscriber = { workspace = true, features = ["env-filter"] }
|
|
ts-rs = { workspace = true, features = [
|
|
"uuid-impl",
|
|
"serde-json-impl",
|
|
"no-serde-warnings",
|
|
] }
|
|
uuid = { workspace = true }
|
|
|
|
|
|
[dev-dependencies]
|
|
assert_cmd = { workspace = true }
|
|
codex-apply-patch = { workspace = true }
|
|
codex-utils-cargo-bin = { workspace = true }
|
|
core_test_support = { workspace = true }
|
|
insta = { workspace = true }
|
|
libc = { workspace = true }
|
|
opentelemetry = { workspace = true }
|
|
opentelemetry_sdk = { workspace = true }
|
|
predicates = { workspace = true }
|
|
pretty_assertions = { workspace = true }
|
|
tempfile = { workspace = true }
|
|
tracing-opentelemetry = { workspace = true }
|
|
uuid = { workspace = true }
|
|
walkdir = { workspace = true }
|
|
wiremock = { workspace = true }
|
|
zstd = { workspace = true }
|