Skip to content

fix: preserve explicit security-header removal - #1036

Merged
dpiet-oai merged 1 commit into
mainfrom
castiron/promotions/pr-92
Sep 21, 2026
Merged

dpiet-oai merged 1 commit into
mainfrom
castiron/promotions/pr-92

Conversation

@dpiet-oai

@dpiet-oai dpiet-oai commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Explicit credential-header removal was lost during request preparation, allowing generated credentials to be reinserted. Preserve case-insensitive removal through copied client options and API/admin/Azure preparation, honor explicit replacements, and suppress generic workload authorization on both HTTP requests and Responses WebSocket connections. Removed bearer-token suppliers are skipped, including on Azure routes. Removed workload credentials are neither fetched nor invalidated after an unrelated rejected WebSocket upgrade. Original clients retain authentication and existing auth-resource close ownership.

Validation: 26 focused header-removal/workload tests and Kotlin lint pass. Public HTTP requests cover synchronous/asynchronous removal and replacement. Four public Responses connection cases cover removal/replacement with successful and rejected upgrades; all four fail on the previous implementation. Eight public request cases also verify that a throwing bearer-token supplier is skipped for ordinary/Azure routes, synchronous/asynchronous calls, and removal/replacement. Tests also verify original-client authentication and credential ownership.

This change covers generated API/admin/Azure credentials and generic workload authentication. Separately bound X.509 and Bedrock authentication is unchanged.

@github-actions

github-actions Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Castiron custom code

✅ No new custom-code files detected.

83 mixed files remain; 0 existing customizations changed.

Compared 6087908a3d5e4cf6c1d2cdb5. Generated baselines verified.

83 existing customizations unchanged
  • openai-java-core/src/main/kotlin/com/openai/models/audio/AudioResponseFormat.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/agents/vaults/credentials/CredentialAuth.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/agents/vaults/credentials/CredentialAuthCreateParam.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/agents/vaults/credentials/CredentialAuthRotateParam.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/responses/BetaResponseStreamEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/responses/BetaResponsesServerEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/chat/completions/ChatCompletionCreateParams.kt
  • openai-java-core/src/main/kotlin/com/openai/models/chat/completions/ChatCompletionMessageFunctionToolCall.kt
  • openai-java-core/src/main/kotlin/com/openai/models/chat/completions/ChatCompletionToolMessageParam.kt
  • openai-java-core/src/main/kotlin/com/openai/models/embeddings/Embedding.kt
  • openai-java-core/src/main/kotlin/com/openai/models/embeddings/EmbeddingCreateParams.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseCreateParams.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseFunctionToolCall.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseFunctionWebSearch.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseInputItem.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseStreamEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseTextConfig.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponsesServerEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/videos/Video.kt
  • openai-java-core/src/main/kotlin/com/openai/models/webhooks/UnwrapWebhookEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/webhooks/WebhookEndpointWithSecret.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/BetaServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/BetaServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/ResponseServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/ResponseServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/WebhookServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/WebhookServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/audio/TranscriptionServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/beta/agents/SessionServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/beta/agents/SessionServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/chat/ChatCompletionServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/finetuning/checkpoints/PermissionServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/BetaService.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/BetaServiceImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/ResponseService.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/ResponseServiceImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/WebhookService.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/WebhookServiceImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/audio/TranscriptionServiceImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/beta/agents/SessionService.kt

43 more in the full report.

A changed generated baseline means this report cannot reliably identify which handwritten lines changed.

Inspect the custom-code diff

Download the exact patch produced by this run (requires repository access):

gh run download 35631524343 --repo openai/openai-java \
  --name castiron-custom-code-35631524343-1 --dir /tmp/castiron-custom-code-35631524343-1
git apply --stat /tmp/castiron-custom-code-35631524343-1/custom-code.patch
cat /tmp/castiron-custom-code-35631524343-1/custom-code.patch

Or reproduce it from an SDK checkout containing the vendored reporter:

git fetch --no-tags origin 6087908a3d5e38f5b684c9bcba46bec162bbbed0 4cf6c1d2cdb566972e7f9092574b0e9ee1aae640
python3 scripts/castiron/custom_code_report.py report \
  --base 6087908a3d5e38f5b684c9bcba46bec162bbbed0 \
  --head 4cf6c1d2cdb566972e7f9092574b0e9ee1aae640 --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-4cf6c1d2cdb5
cat /tmp/castiron-custom-code-4cf6c1d2cdb5/custom-code.patch

This is the current full custom patch for mixed files, not an attribution of only the handwritten lines changed by this PR.

Full report and patch

@dpiet-oai
dpiet-oai force-pushed the castiron/promotions/pr-92 branch from 57b740c to e44fb28 Compare September 20, 2026 02:40
@dpiet-oai
dpiet-oai marked this pull request as ready for review September 20, 2026 02:41
@dpiet-oai
dpiet-oai requested a review from a team as a code owner September 20, 2026 02:41
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 20, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-21T17:23:45.891388Z 4cf6c1d New commits
🔒 Security Review Completed 2026-09-21T17:23:48.947463Z 4cf6c1d New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@openai-sdks

openai-sdks Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

OkTest Summary

236/236 SDK tests passed in 16.628s for Java SDK PR #1036.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 209ms
tests/chat-completions-create.test.ts ✅ Passed 770ms
tests/chat-completions-stream.test.ts ✅ Passed 745ms
tests/files-content-binary.test.ts ✅ Passed 280ms
tests/files-create-multipart.test.ts ✅ Passed 379ms
tests/files-list-pagination.test.ts ✅ Passed 266ms
tests/initialize-config.test.ts ✅ Passed 215ms
tests/instance-isolation.test.ts ✅ Passed 235ms
tests/models-list.test.ts ✅ Passed 255ms
tests/responses-background-lifecycle.test.ts ✅ Passed 708ms
tests/responses-body-method-errors.test.ts ✅ Passed 460ms
tests/responses-cancel-timeout.test.ts ✅ Passed 266ms
tests/responses-cancel.test.ts ✅ Passed 228ms
tests/responses-compact-retries.test.ts ✅ Passed 432ms
tests/responses-compact.test.ts ✅ Passed 322ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 630ms
tests/responses-create-advanced.test.ts ✅ Passed 1.213s
tests/responses-create-disconnect.test.ts ✅ Passed 1.063s
tests/responses-create-errors.test.ts ✅ Passed 424ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 278ms
tests/responses-create-retries.test.ts ✅ Passed 282ms
tests/responses-create-stream-failures.test.ts ✅ Passed 333ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 213ms
tests/responses-create-stream-wire.test.ts ✅ Passed 6.205s
tests/responses-create-stream.test.ts ✅ Passed 419ms
tests/responses-create-terminal-states.test.ts ✅ Passed 390ms
tests/responses-create-timeout.test.ts ✅ Passed 267ms
tests/responses-create.test.ts ✅ Passed 272ms
tests/responses-delete.test.ts ✅ Passed 285ms
tests/responses-input-items-errors.test.ts ✅ Passed 258ms
tests/responses-input-items-list.test.ts ✅ Passed 354ms
tests/responses-input-items-options.test.ts ✅ Passed 441ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 236ms
tests/responses-input-tokens-count.test.ts ✅ Passed 448ms
tests/responses-malformed-inputs.test.ts ✅ Passed 4.894s
tests/responses-not-found-errors.test.ts ✅ Passed 493ms
tests/responses-parse.test.ts ✅ Passed 604ms
tests/responses-retrieve-retries.test.ts ✅ Passed 271ms
tests/responses-retrieve.test.ts ✅ Passed 249ms
tests/responses-stored-method-errors.test.ts ✅ Passed 983ms
tests/retry-behavior.test.ts ✅ Passed 3.378s
tests/sdk-error-shape.test.ts ✅ Passed 450ms

View OkTest run #35631461583

SDK merge (1cf6ea609f9a) · head (4cf6c1d2cdb5) · base (6087908a3d5e) · OkTest (a0be4375e02d)

@dpiet-oai
dpiet-oai force-pushed the castiron/promotions/pr-92 branch from e44fb28 to f141b60 Compare September 21, 2026 15:51

@markstuart-oai markstuart-oai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed f141b60. The copied removal set consistently suppresses generated API/admin/Azure headers and generic workload authentication while preserving explicit replacement headers, the original client, and auth-resource closure. The focused regressions cover HTTP and WebSocket paths, including throwing token suppliers and rejected upgrades. No actionable correctness or structural issues found.

Validation: inspected the pinned source, surrounding header composition and authentication paths, tests, and passing exact-head hosted checks (tests, lint, build, Java/Jackson compatibility and API compatibility). I did not independently execute tests.

Castiron-Internal-PR: openai/openai-java-internal#92
Castiron-Source-SHA: b417859f0f001896cdd47fe7b74c115a3976a369
Castiron-Public-Base-SHA: 6087908
@dpiet-oai
dpiet-oai force-pushed the castiron/promotions/pr-92 branch from f141b60 to 4cf6c1d Compare September 21, 2026 17:21
@dpiet-oai
dpiet-oai added this pull request to the merge queue Sep 21, 2026
Merged via the queue into main with commit 5ac7585 Sep 21, 2026
14 checks passed
@openai-sdks openai-sdks Bot mentioned this pull request Sep 21, 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.

2 participants