Skip to content

Commit c3000c5

Browse files
committed
Harden color option validation in thread options
Reject invalid color placeholders and normalize case-insensitive values Add explicit regression coverage for invalid color inputs
1 parent 48dd32f commit c3000c5

2 files changed

Lines changed: 19 additions & 7 deletions

File tree

lib/codex/thread/options.ex

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -723,13 +723,20 @@ defmodule Codex.Thread.Options do
723723
defp normalize_sandbox_policy(value), do: {:error, {:invalid_sandbox_policy, value}}
724724

725725
defp normalize_color(nil), do: {:ok, nil}
726-
defp normalize_color(:auto), do: {:ok, :auto}
727-
defp normalize_color(:always), do: {:ok, :always}
728-
defp normalize_color(:never), do: {:ok, :never}
729-
defp normalize_color("auto"), do: {:ok, :auto}
730-
defp normalize_color("always"), do: {:ok, :always}
731-
defp normalize_color("never"), do: {:ok, :never}
732-
defp normalize_color(value) when is_binary(value), do: {:ok, value}
726+
727+
defp normalize_color(value) when is_atom(value),
728+
do: value |> Atom.to_string() |> normalize_color()
729+
730+
defp normalize_color(value) when is_binary(value) do
731+
case String.downcase(String.trim(value)) do
732+
"auto" -> {:ok, :auto}
733+
"always" -> {:ok, :always}
734+
"never" -> {:ok, :never}
735+
"" -> {:ok, nil}
736+
_other -> {:error, {:invalid_color, value}}
737+
end
738+
end
739+
733740
defp normalize_color(value), do: {:error, {:invalid_color, value}}
734741

735742
defp normalize_history_persistence(value),

test/codex/thread_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,11 @@ defmodule Codex.ThreadTest do
209209
config_overrides: %{"features" => %{"web_search_request" => nil}}
210210
})
211211
end
212+
213+
test "rejects invalid color values" do
214+
assert {:error, {:invalid_color, "nil"}} = ThreadOptions.new(%{color: "nil"})
215+
assert {:error, {:invalid_color, "bad"}} = ThreadOptions.new(%{color: "bad"})
216+
end
212217
end
213218

214219
describe "build/3" do

0 commit comments

Comments
 (0)