diff --git a/Pipfile b/Pipfile index f5903457f589fb02d40fc4491174175d7d399740..ad580175866db1894519091fc7fa0126d9ea5f8b 100644 --- a/Pipfile +++ b/Pipfile @@ -41,6 +41,7 @@ funcy = "*" vprof = "*" [packages] +attrs = "==19.1.0" aiodns = "*" aiohttp = "*" aredis = "*" diff --git a/jussi/validators.py b/jussi/validators.py index efd8e9f6c83df70a1e40c4d591555b409ef54400..9e5c08691ae5f89f80d98aad46a1543474dc5754 100644 --- a/jussi/validators.py +++ b/jussi/validators.py @@ -34,7 +34,7 @@ NONE_TYPE = type(None) ID_TYPES = (int, str, float, NONE_TYPE) PARAMS_TYPES = (list, dict, NONE_TYPE) -CUSTOM_JSON_SIZE_LIMIT = 2000 +CUSTOM_JSON_SIZE_LIMIT = 8192 CUSTOM_JSON_FOLLOW_RATE = 2 BROADCAST_TRANSACTION_METHODS = { @@ -199,7 +199,7 @@ def limit_broadcast_transaction_request(request: JSONRPCRequest, limits=None) -> def limit_custom_json_op_length(ops: list, size_limit=None): - if any(len(op[1]['json']) > size_limit for op in ops): + if any(len(op[1]['json'].encode('utf-8')) > size_limit for op in ops): raise JussiCustomJsonOpLengthError(size_limit=size_limit) diff --git a/tests/conftest.py b/tests/conftest.py index 091ddc99c6ebbbd5aa3b27101bcbf479e51ce44d..0b8a66e7a9f3cb0a66e5be1b408cd932439f01be 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1594,7 +1594,7 @@ INVALID_BROADCAST_TRANSACTIONS = [ { "required_auths": [], "id": "follow", - "json": 'a' * 2001, + "json": 'a' * 8193, "required_posting_auths": ["steemit"] } ] @@ -1666,7 +1666,7 @@ INVALID_BROADCAST_TRANSACTIONS = [ { "required_auths": [], "id": "follow", - "json": 'a' * 2001, + "json": 'a' * 8193, "required_posting_auths": ["steemit"] } ] diff --git a/tests/test_validators.py b/tests/test_validators.py index 428900301fc1f17a50e6394b7d742a7cf01bbcfb..a5ce85c02a0b1e14760a698fda8a869df2e0de84 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -294,7 +294,16 @@ def test_is_valid_jussi_response_using_steemd(steemd_request_and_response): { "required_auths": [], "id": "follow", - "json": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "json": "a"*8192, + "required_posting_auths": ["steemit"] + } + ]], False), + ([[ + 'custom_json', + { + "required_auths": [], + "id": "follow", + "json": "😂"*2048, "required_posting_auths": ["steemit"] } ]], False), @@ -302,9 +311,9 @@ def test_is_valid_jussi_response_using_steemd(steemd_request_and_response): def test_is_valid_custom_json_op_length(ops, expected): if expected is False: with pytest.raises(JussiCustomJsonOpLengthError): - limit_custom_json_op_length(ops, size_limit=1000) + limit_custom_json_op_length(ops, size_limit=8191) else: - limit_custom_json_op_length(ops, size_limit=1000) + limit_custom_json_op_length(ops, size_limit=100) @pytest.mark.parametrize('ops, expected', [