diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2021-03-07 17:54:57 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2021-03-07 17:54:57 (GMT) |
commit | fde9e3b46192a065ec622da1395c48015df3cf32 (patch) | |
tree | c149b6836fd38d125f0630332577990f088560d8 | |
parent | 7a60504691ebd8b914592e60990cc3526cf26e29 (diff) |
Handle hashes of data types as Py_ssize_t values from Python bindings.
-rw-r--r-- | plugins/pychrysalide/analysis/type.c | 2 | ||||
-rw-r--r-- | tests/analysis/type.py | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/plugins/pychrysalide/analysis/type.c b/plugins/pychrysalide/analysis/type.c index 303d188..86a0ffb 100644 --- a/plugins/pychrysalide/analysis/type.c +++ b/plugins/pychrysalide/analysis/type.c @@ -243,7 +243,7 @@ static guint py_data_type_hash_wrapper(const GDataType *type) if (pyret != NULL) { if (PyLong_Check(pyret)) - result = PyLong_AsUnsignedLong(pyret); + result = PyLong_AsSsize_t(pyret); } Py_XDECREF(pyret); diff --git a/tests/analysis/type.py b/tests/analysis/type.py index b690a55..405659e 100644 --- a/tests/analysis/type.py +++ b/tests/analysis/type.py @@ -107,3 +107,18 @@ class TestDataType(ChrysalideTestCase): tp = MyUserType('random') self.assertEqual(tp.hash, hash('random') & ((1 << 32) - 1)) + + class MyOutOfRangeUserType(DataType): + + hard_coded_hash = -8752470794866657507 + + def __init__(self, name): + super(MyOutOfRangeUserType, self).__init__() + self._name = name + + def _hash(self): + return self.hard_coded_hash + + tp = MyOutOfRangeUserType('out-of-range') + + self.assertEqual(tp.hash, MyOutOfRangeUserType.hard_coded_hash & ((1 << 32) - 1)) |