Skip to content

Commit 3d40c4b

Browse files
committed
sonar security
1 parent d245e70 commit 3d40c4b

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

services/web/server/src/simcore_service_webserver/licenses/_itis_vip_models.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,18 @@
33

44
from pydantic import BaseModel, BeforeValidator, Field, HttpUrl
55

6+
_MAX_LENGTH = 1_000
7+
68

79
def _feature_descriptor_to_dict(descriptor: str) -> dict[str, Any]:
810
# NOTE: this is manually added in the server side so be more robust to errors
9-
pattern = r"(\w+): ([^,]+)"
11+
# Safe against polynomial runtime vulnerability due to backtracking
12+
if (size := len(descriptor)) and size > _MAX_LENGTH:
13+
msg = f"Features field too long [{size=}]"
14+
raise ValueError(msg)
15+
16+
pattern = r"(\w{1,100}): ([^,]{1,100})"
17+
1018
matches = re.findall(pattern, descriptor.strip("{}"))
1119
return dict(matches)
1220

services/web/server/tests/unit/with_dbs/04/licenses/test_itis_vip_service.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
from pytest_simcore.helpers.typing_env import EnvVarsDict
1616
from servicelib.aiohttp import status
1717
from simcore_service_webserver.licenses import _itis_vip_service
18+
from simcore_service_webserver.licenses._itis_vip_models import (
19+
_feature_descriptor_to_dict,
20+
)
1821
from simcore_service_webserver.licenses._itis_vip_service import ResponseData
1922
from simcore_service_webserver.licenses._itis_vip_settings import ItisVipSettings
2023

@@ -108,3 +111,8 @@ async def test_get_category_items(
108111
items = await _itis_vip_service.get_category_items(client, url)
109112

110113
assert items[0].features["functionality"] == "Posable"
114+
115+
116+
def test_pre_validator_feature_descriptor_to_dict():
117+
with pytest.raises(ValueError):
118+
_feature_descriptor_to_dict("a" * 10000 + ": " + "b" * 10000)

0 commit comments

Comments
 (0)