mirror of
https://github.com/langgenius/dify.git
synced 2026-07-20 09:38:32 +08:00
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:
parent
99e3b1a401
commit
9d5819a9c1
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
24
api/tests/unit_tests/core/helper/test_provider_cache.py
Normal file
24
api/tests/unit_tests/core/helper/test_provider_cache.py
Normal 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
|
||||
@ -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(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user