Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Version number retrieval fails if gpg groups are defined #249

@drewmnoel

Description

@drewmnoel

Describe the bug
The version of gpg is not retrieved when certain gpg config options are present.

To Reproduce
Steps to reproduce the behavior:

  1. Create a gpg config file in ~/.gnupg/gpg.conf with a group defined (e.g., group somegroup = D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C)
  2. python -c 'import gnupg; gnupg.GPG().list_keys()'

Expected behavior
No crash

Actual behavior
Crash

$ python -c 'import gnupg; gnupg.GPG().list_keys()'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
    import gnupg; gnupg.GPG().list_keys()
                  ~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/site-packages/gnupg.py", line 1835, in list_keys
    if self.version >= (2, 1):
       ^^^^^^^^^^^^^^^^^^^^^^
TypeError: '>=' not supported between instances of 'NoneType' and 'tuple'

Environment

  • Arch Linux
  • gpg 2.4.7
  • python-gnupg 0.5.4

Additional information
Groups are reported in the gpg output before the version:

$ gpg --list-config --with-colons
cfg:group:somegroup:D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C
cfg:version:2.4.7
cfg:pubkey:1;16;17;18;19;22
cfg:pubkeyname:RSA;ELG;DSA;ECDH;ECDSA;EDDSA
[..snip..]

When checking the version, python-gnupg retrieves all options, but the version checking regex assumes that the first output is the version:

python-gnupg/gnupg.py

Lines 1147 to 1157 in fcc8ebe

try:
p = self._open_subprocess(['--list-config', '--with-colons'])
except OSError:
msg = 'Unable to run gpg (%s) - it may not be available.' % self.gpgbinary
logger.exception(msg)
raise OSError(msg)
result = self.result_map['verify'](self) # any result will do for this
self._collect_output(p, result, stdin=p.stdin)
if p.returncode != 0: # pragma: no cover
raise ValueError('Error invoking gpg: %s: %s' % (p.returncode, result.stderr))
m = VERSION_RE.match(result.data)

VERSION_RE = re.compile(r'^cfg:version:(\d+(\.\d+)*)'.encode('ascii'))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions