mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
openbsd_pkg: Fix regexp matching crash (#3161)
When a package name contains special characters (e.g. "g++"), they are interpreted as part of the regexp. This can lead to a crash with an error in the python re module, for instance with "g++": sre_constants.error: multiple repeat Fix this by escaping the package name. Co-authored-by: Baptiste Jonglez <git@bitsofnetworks.org>
This commit is contained in:
parent
429359e977
commit
56b5be0630
2 changed files with 4 additions and 2 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
bugfixes:
|
||||||
|
- openbsd_pkg - fix regexp matching crash. This bug could trigger on package names with special characters, for example ``g++`` (https://github.com/ansible-collections/community.general/pull/3161).
|
|
@ -241,7 +241,7 @@ def package_present(names, pkg_spec, module):
|
||||||
# "file:/local/package/directory/ is empty" message on stderr
|
# "file:/local/package/directory/ is empty" message on stderr
|
||||||
# while still installing the package, so we need to look for
|
# while still installing the package, so we need to look for
|
||||||
# for a message like "packagename-1.0: ok" just in case.
|
# for a message like "packagename-1.0: ok" just in case.
|
||||||
match = re.search(r"\W%s-[^:]+: ok\W" % pkg_spec[name]['stem'], pkg_spec[name]['stdout'])
|
match = re.search(r"\W%s-[^:]+: ok\W" % re.escape(pkg_spec[name]['stem']), pkg_spec[name]['stdout'])
|
||||||
|
|
||||||
if match:
|
if match:
|
||||||
# It turns out we were able to install the package.
|
# It turns out we were able to install the package.
|
||||||
|
@ -295,7 +295,7 @@ def package_latest(names, pkg_spec, module):
|
||||||
pkg_spec[name]['changed'] = False
|
pkg_spec[name]['changed'] = False
|
||||||
for installed_name in pkg_spec[name]['installed_names']:
|
for installed_name in pkg_spec[name]['installed_names']:
|
||||||
module.debug("package_latest(): checking for pre-upgrade package name: %s" % installed_name)
|
module.debug("package_latest(): checking for pre-upgrade package name: %s" % installed_name)
|
||||||
match = re.search(r"\W%s->.+: ok\W" % installed_name, pkg_spec[name]['stdout'])
|
match = re.search(r"\W%s->.+: ok\W" % re.escape(installed_name), pkg_spec[name]['stdout'])
|
||||||
if match:
|
if match:
|
||||||
module.debug("package_latest(): pre-upgrade package name match: %s" % installed_name)
|
module.debug("package_latest(): pre-upgrade package name match: %s" % installed_name)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue