From 2f63ad89473c3df372f4494e8637fd38bb6e7866 Mon Sep 17 00:00:00 2001 From: evan Date: Mon, 5 Jun 2023 16:37:21 -0500 Subject: [PATCH] fix error when time is None --- CHANGELOG.rst | 12 +++++++++--- pykeepass/baseelement.py | 2 +- tests/test3.kdbx | Bin 4030 -> 4142 bytes tests/test4.kdbx | Bin 4129 -> 4226 bytes tests/tests.py | 5 +++++ 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index df2d5812..0070d0e2 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,4 +1,10 @@ -4.0.4 - +4.0.5 - +------------------ +- fixed #344 - AttributeError when accessing Times with None value +- use __hash__ when evaluating equality +- use mtime/uuid for HistoryEntry hashing + +4.0.4 - 2023-05-23 ------------------ - fixed #314 - correctly handle binaries with no data - fixed #265 - check for keepass signature @@ -10,8 +16,8 @@ 4.0.3 - 2022-06-21 ------------------ -- add otp support -- add debug_setup() function +- added otp support +- added debug_setup() function 4.0.2 - 2022-05-21 ------------------ diff --git a/pykeepass/baseelement.py b/pykeepass/baseelement.py index 16245473..e9ffc391 100644 --- a/pykeepass/baseelement.py +++ b/pykeepass/baseelement.py @@ -93,7 +93,7 @@ def _get_times_property(self, prop): times = self._element.find('Times') if times is not None: prop = times.find(prop) - if prop is not None: + if prop is not None and prop.text is not None: return self._kp._decode_time(prop.text) def _set_times_property(self, prop, value): diff --git a/tests/test3.kdbx b/tests/test3.kdbx index 8c4858eb5016833e3d2d0678540102d324ee703d..ab02bbf7b802875c5dc90eec43f4235cb549c46c 100644 GIT binary patch delta 3925 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 delta 3812 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 diff --git a/tests/test4.kdbx b/tests/test4.kdbx index 7765b93d68b6c6c69107549a5a93dbec062ea6f9..937d79b1e64f23eda7231f1ca37dcff4300ca1c8 100644 GIT binary patch delta 3890 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 Ag8%>k delta 3782 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