fix(api): ignore invalid utf8 cache payloads (#37835)

Co-authored-by: Harsh Kashyap <Harsh23Kashyap@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Harsh Kashyap <harshkashyap@Harshs-MacBook-Pro.local>
This commit is contained in:
Harsh Kashyap 2026-07-09 15:22:49 +05:30 committed by GitHub
parent 99e3b1a401
commit 9d5819a9c1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 74 additions and 3 deletions

View File

@ -27,7 +27,7 @@ class ProviderCredentialsCache:
try:
cached_provider_credentials = cached_provider_credentials.decode("utf-8")
cached_provider_credentials = json.loads(cached_provider_credentials)
except JSONDecodeError:
except (JSONDecodeError, UnicodeDecodeError):
return None
return dict(cached_provider_credentials)

View File

@ -24,7 +24,7 @@ class ProviderCredentialsCache(ABC):
try:
cached_credentials = cached_credentials.decode("utf-8")
return dict(json.loads(cached_credentials))
except JSONDecodeError:
except (JSONDecodeError, UnicodeDecodeError):
return None
return None

View File

@ -30,7 +30,7 @@ class ToolParameterCache:
try:
cached_tool_parameter = cached_tool_parameter.decode("utf-8")
cached_tool_parameter = json.loads(cached_tool_parameter)
except JSONDecodeError:
except (JSONDecodeError, UnicodeDecodeError):
return None
return dict(cached_tool_parameter)

View File

@ -0,0 +1,32 @@
import json
from pytest_mock import MockerFixture
from core.helper.model_provider_cache import ProviderCredentialsCache, ProviderCredentialsCacheType
def test_model_provider_credentials_cache_get_returns_decoded_dict(mocker: MockerFixture) -> None:
redis_client_mock = mocker.patch("core.helper.model_provider_cache.redis_client")
cache = ProviderCredentialsCache(
tenant_id="tenant",
identity_id="identity",
cache_type=ProviderCredentialsCacheType.PROVIDER,
)
payload = {"api_key": "secret"}
redis_client_mock.get.return_value = json.dumps(payload).encode("utf-8")
assert cache.get() == payload
def test_model_provider_credentials_cache_get_returns_none_for_invalid_utf8(mocker: MockerFixture) -> None:
redis_client_mock = mocker.patch("core.helper.model_provider_cache.redis_client")
cache = ProviderCredentialsCache(
tenant_id="tenant",
identity_id="identity",
cache_type=ProviderCredentialsCacheType.PROVIDER,
)
redis_client_mock.get.return_value = b"\xff"
assert cache.get() is None

View File

@ -0,0 +1,24 @@
import json
from pytest_mock import MockerFixture
from core.helper.provider_cache import ToolProviderCredentialsCache
def test_provider_credentials_cache_get_returns_decoded_dict(mocker: MockerFixture) -> None:
redis_client_mock = mocker.patch("core.helper.provider_cache.redis_client")
cache = ToolProviderCredentialsCache(tenant_id="tenant", provider="provider", credential_id="credential")
payload = {"api_key": "secret"}
redis_client_mock.get.return_value = json.dumps(payload).encode("utf-8")
assert cache.get() == payload
def test_provider_credentials_cache_get_returns_none_for_invalid_utf8(mocker: MockerFixture) -> None:
redis_client_mock = mocker.patch("core.helper.provider_cache.redis_client")
cache = ToolProviderCredentialsCache(tenant_id="tenant", provider="provider", credential_id="credential")
redis_client_mock.get.return_value = b"\xff"
assert cache.get() is None

View File

@ -38,6 +38,21 @@ def test_tool_parameter_cache_get_returns_none_for_invalid_json(mocker: MockerFi
assert cache.get() is None
def test_tool_parameter_cache_get_returns_none_for_invalid_utf8(mocker: MockerFixture) -> None:
redis_client_mock = mocker.patch("core.helper.tool_parameter_cache.redis_client")
cache = ToolParameterCache(
tenant_id="tenant",
provider="provider",
tool_name="tool",
cache_type=ToolParameterCacheType.PARAMETER,
identity_id="identity",
)
redis_client_mock.get.return_value = b"\xff"
assert cache.get() is None
def test_tool_parameter_cache_get_returns_none_when_key_is_missing(mocker: MockerFixture) -> None:
redis_client_mock = mocker.patch("core.helper.tool_parameter_cache.redis_client")
cache = ToolParameterCache(