From a7750cd170f195f066fee500d76f8812c57d5a2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl> Date: Fri, 6 Aug 2021 18:41:02 +0200 Subject: [PATCH] fix ARM bug, add ppc64le --- .travis.yml | 12 ++++++++++++ docs/changelog.md | 1 + minijson.pyx | 33 ++++++++++++--------------------- setup.cfg | 2 +- tests/test_minijson.py | 7 +++++++ 5 files changed, 33 insertions(+), 22 deletions(-) diff --git a/.travis.yml b/.travis.yml index 960f183..b4c7519 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,6 +38,18 @@ jobs: script: - DEBUG=1 python setup.py install - pytest --cov=./ --cov-report=xml + - stage: test + python: "3.8" + arch: "ppc64le" + before_script: + - pip install -r requirements.txt + - pip install pytest coverage pytest-cov + after_script: + - coverage xml + - coverage report + script: + - DEBUG=1 python setup.py install + - pytest --cov=./ --cov-report=xml - stage: test python: "3.8" script: diff --git a/docs/changelog.md b/docs/changelog.md index 0abd45e..2c6eb0d 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -5,6 +5,7 @@ v2.9 ---- * minor refactor: code deduplication +* fixed some bugs on ARM v2.8 ---- diff --git a/minijson.pyx b/minijson.pyx index 05bcd27..b7e9869 100644 --- a/minijson.pyx +++ b/minijson.pyx @@ -176,27 +176,18 @@ cdef tuple parse_bytes(bytes data, int starting_position): return offset+1, b_field_name.decode('utf-8') except UnicodeDecodeError as e: raise DecodingError('Invalid UTF-8') from e - elif value_type in (1, 4): - uint32 = (data[starting_position+1] << 24) | (data[starting_position+2] << 16) | (data[starting_position+3] << 8) | data[starting_position+4] - if value_type == 4: - return 5, uint32 - else: - sint32 = uint32 - return 5, sint32 - elif value_type in (2, 5): - uint16 = (data[starting_position+1] << 8) | data[starting_position+2] - if value_type == 5: - return 3, uint16 - else: - sint16 = uint16 - return 3, sint16 - elif value_type in (3, 6): - uint8 = data[starting_position+1] - if value_type == 6: - return 2, uint8 - else: - sint8 = uint8 - return 2, sint8 + elif value_type == 1: + return 5, *STRUCT_l.unpack(data[starting_position+1:starting_position+5]) + elif value_type == 4: + return 5, *STRUCT_L.unpack(data[starting_position+1:starting_position+5]) + elif value_type == 2: + return 3, *STRUCT_h.unpack(data[starting_position+1:starting_position+3]) + elif value_type == 5: + return 3, *STRUCT_H.unpack(data[starting_position+1:starting_position+3]) + elif value_type == 3: + return 2, *STRUCT_b.unpack(data[starting_position+1:starting_position+2]) + elif value_type == 6: + return 2, data[starting_position+1] elif value_type == 7: elements = data[starting_position+1] offset, e_list = parse_list(data, elements, starting_position+2) diff --git a/setup.cfg b/setup.cfg index a33a1d4..02c1353 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ # coding: utf-8 [metadata] -version = 2.9a1 +version = 2.9a2 name = minijson long_description = file: README.md long_description_content_type = text/markdown; charset=UTF-8 diff --git a/tests/test_minijson.py b/tests/test_minijson.py index 31f686b..bb9cb93 100644 --- a/tests/test_minijson.py +++ b/tests/test_minijson.py @@ -11,6 +11,13 @@ class TestMiniJSON(unittest.TestCase): enc.encode({"test": "2", "value": 2}) enc.encode({b"test": "2", b"value": 2}) + def test_are_we_sane(self): + self.assertTrue(-128 <= -1 <= 127) + + def test_arm_bug(self): + b = dumps(-1) + self.assertEqual(b, b'\x03\xFF') + def test_encoder_overrided_default(self): class Encoder(MiniJSONEncoder): def default(self, v): -- GitLab