From 04da21c2f6fc4702cb616082707de6bd9db47e2e Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 31 Jan 2022 12:20:40 +0100 Subject: [PATCH] gdc: raise APIError on unloadable content (#61254) --- passerelle/apps/gdc/models.py | 7 ++++++- tests/test_gdc.py | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 tests/test_gdc.py diff --git a/passerelle/apps/gdc/models.py b/passerelle/apps/gdc/models.py index 167c4a1a..2dfbc719 100644 --- a/passerelle/apps/gdc/models.py +++ b/passerelle/apps/gdc/models.py @@ -27,6 +27,7 @@ from django.utils.translation import ugettext_lazy as _ from passerelle.base.models import BaseResource from passerelle.utils.api import endpoint +from passerelle.utils.jsonresponse import APIError def deep_bytes2str(obj): @@ -48,7 +49,11 @@ def deep_bytes2str(obj): def phpserialize_loads(s): - return deep_bytes2str(phpserialize.loads(s.encode('utf-8'))) + try: + return deep_bytes2str(phpserialize.loads(s.encode('utf-8'))) + except ValueError: + truncated = s[:128] if isinstance(s, str) else s + raise APIError(f'Could not deserialize GDC response {truncated!r}', data={'content': s}) class Gdc(BaseResource): diff --git a/tests/test_gdc.py b/tests/test_gdc.py new file mode 100644 index 00000000..8077457d --- /dev/null +++ b/tests/test_gdc.py @@ -0,0 +1,9 @@ +import pytest + +from passerelle.apps.gdc import models +from passerelle.utils.jsonresponse import APIError + + +def test_phpserialize_loads(): + with pytest.raises(APIError, match='Could not deserialize GDC response'): + models.phpserialize_loads('aaa') -- 2.34.1