Skip to content

[4.0.7] regression -> gnome secrets crashes on expiration date check with missmatch of date format #382

@fabiscafe

Description

@fabiscafe
  • System: Arch Linux
  • python 3.11.8
  • pykeepass 4.0.7
  • secrets 8.0

Secrets is a password manager.

After importing #378 to make secrets even build and work (see the PR), secrets now crashes when trying to unlock the .kdbx. It looks like at least one of my expiration dates does have an incompatible format. This shouldn't happen inside a minor release. Rolling back to pykeepass 4.0.6 makes secrets work again.

This is the output I get when starting it from the terminal.

Traceback (most recent call last):
  File "/usr/lib/python3.11/site-packages/gsecrets/unlock_database.py", line 212, in _unlock_callback
    database_manager.unlock_finish(result)
  File "/usr/lib/python3.11/site-packages/gsecrets/database_manager.py", line 124, in unlock_finish
    self.entries.splice(0, 0, [SafeEntry(self, e) for e in db.entries])
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/gsecrets/database_manager.py", line 124, in <listcomp>
    self.entries.splice(0, 0, [SafeEntry(self, e) for e in db.entries])
                               ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/gsecrets/safe_element.py", line 545, in __init__
    self._check_expiration()
  File "/usr/lib/python3.11/site-packages/gsecrets/safe_element.py", line 603, in _check_expiration
    if self.props.expired:
       ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/gi/_propertyhelper.py", line 394, in obj_get_property
    return getattr(self, name, None)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/gi/_propertyhelper.py", line 207, in __get__
    value = self.fget(instance)
            ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/gsecrets/safe_element.py", line 919, in expired
    return self.entry.expired
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pykeepass/baseelement.py", line 120, in expired
    self.expiry_time
  File "/usr/lib/python3.11/site-packages/pykeepass/baseelement.py", line 127, in expiry_time
    return self._get_times_property('ExpiryTime')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pykeepass/baseelement.py", line 94, in _get_times_property
    return self._kp._decode_time(prop.text)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pykeepass/pykeepass.py", line 824, in _decode_time
    return datetime.strptime(text, DT_ISOFORMAT).replace(tzinfo=timezone.utc)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/_strptime.py", line 567, in _strptime_datetime
    tt, fraction, gmtoff_fraction = _strptime(data_string, format)
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/_strptime.py", line 349, in _strptime
    raise ValueError("time data %r does not match format %r" %
ValueError: time data '2024-01-29T23:00:00+00:00' does not match format '%Y-%m-%dT%H:%M:%S%fZ'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions