re.escape literals.

This commit is contained in:
Jelmer Vernooij 2021-03-20 20:23:56 +00:00
parent b1aabf40de
commit 5030d888c3
No known key found for this signature in database
GPG key ID: 579C160D4C9E23E8

View file

@ -19,6 +19,7 @@ from itertools import chain
import logging import logging
import os import os
import posixpath import posixpath
import re
from debian.changelog import Version from debian.changelog import Version
from debian.deb822 import PkgRelation from debian.deb822 import PkgRelation
@ -119,14 +120,14 @@ def python_spec_to_apt_rels(pkg_name, specs):
def get_package_for_python_package(apt_mgr, package, python_version, specs=None): def get_package_for_python_package(apt_mgr, package, python_version, specs=None):
if python_version == "pypy": if python_version == "pypy":
pkg_name = apt_mgr.get_package_for_paths( pkg_name = apt_mgr.get_package_for_paths(
["/usr/lib/pypy/dist-packages/%s-.*.egg-info" % package.replace("-", "_")], ["/usr/lib/pypy/dist-packages/%s-.*.egg-info" % re.escape(package.replace("-", "_"))],
regex=True, regex=True,
) )
elif python_version == "cpython2": elif python_version == "cpython2":
pkg_name = apt_mgr.get_package_for_paths( pkg_name = apt_mgr.get_package_for_paths(
[ [
"/usr/lib/python2\\.[0-9]/dist-packages/%s-.*.egg-info" "/usr/lib/python2\\.[0-9]/dist-packages/%s-.*.egg-info"
% package.replace("-", "_") % re.escape(package.replace("-", "_"))
], ],
regex=True, regex=True,
) )
@ -134,7 +135,7 @@ def get_package_for_python_package(apt_mgr, package, python_version, specs=None)
pkg_name = apt_mgr.get_package_for_paths( pkg_name = apt_mgr.get_package_for_paths(
[ [
"/usr/lib/python3/dist-packages/%s-.*.egg-info" "/usr/lib/python3/dist-packages/%s-.*.egg-info"
% package.replace("-", "_") % re.escape(package.replace("-", "_"))
], ],
regex=True, regex=True,
) )
@ -151,50 +152,50 @@ def get_package_for_python_module(apt_mgr, module, python_version, specs):
paths = [ paths = [
posixpath.join( posixpath.join(
"/usr/lib/python3/dist-packages", "/usr/lib/python3/dist-packages",
module.replace(".", "/"), re.escape(module.replace(".", "/")),
"__init__.py", "__init__.py",
), ),
posixpath.join( posixpath.join(
"/usr/lib/python3/dist-packages", module.replace(".", "/") + ".py" "/usr/lib/python3/dist-packages", re.escape(module.replace(".", "/")) + ".py"
), ),
posixpath.join( posixpath.join(
"/usr/lib/python3\\.[0-9]+/lib-dynload", "/usr/lib/python3\\.[0-9]+/lib-dynload",
module.replace(".", "/") + "\\.cpython-.*\\.so", re.escape(module.replace(".", "/")) + "\\.cpython-.*\\.so",
), ),
posixpath.join( posixpath.join(
"/usr/lib/python3\\.[0-9]+/", module.replace(".", "/") + ".py" "/usr/lib/python3\\.[0-9]+/", re.escape(module.replace(".", "/")) + ".py"
), ),
posixpath.join( posixpath.join(
"/usr/lib/python3\\.[0-9]+/", module.replace(".", "/"), "__init__.py" "/usr/lib/python3\\.[0-9]+/", re.escape(module.replace(".", "/")), "__init__.py"
), ),
] ]
elif python_version == "cpython2": elif python_version == "cpython2":
paths = [ paths = [
posixpath.join( posixpath.join(
"/usr/lib/python2\\.[0-9]/dist-packages", "/usr/lib/python2\\.[0-9]/dist-packages",
module.replace(".", "/"), re.escape(module.replace(".", "/")),
"__init__.py", "__init__.py",
), ),
posixpath.join( posixpath.join(
"/usr/lib/python2\\.[0-9]/dist-packages", "/usr/lib/python2\\.[0-9]/dist-packages",
module.replace(".", "/") + ".py", re.escape(module.replace(".", "/")) + ".py",
), ),
posixpath.join( posixpath.join(
"/usr/lib/python2.\\.[0-9]/lib-dynload", "/usr/lib/python2.\\.[0-9]/lib-dynload",
module.replace(".", "/") + ".so", re.escape(module.replace(".", "/")) + ".so",
), ),
] ]
elif python_version == "pypy": elif python_version == "pypy":
paths = [ paths = [
posixpath.join( posixpath.join(
"/usr/lib/pypy/dist-packages", module.replace(".", "/"), "__init__.py" "/usr/lib/pypy/dist-packages", re.escape(module.replace(".", "/")), "__init__.py"
), ),
posixpath.join( posixpath.join(
"/usr/lib/pypy/dist-packages", module.replace(".", "/") + ".py" "/usr/lib/pypy/dist-packages", re.escape(module.replace(".", "/")) + ".py"
), ),
posixpath.join( posixpath.join(
"/usr/lib/pypy/dist-packages", "/usr/lib/pypy/dist-packages",
module.replace(".", "/") + "\\.pypy-.*\\.so", re.escape(module.replace(".", "/")) + "\\.pypy-.*\\.so",
), ),
] ]
else: else:
@ -225,7 +226,7 @@ def resolve_pkg_config_req(apt_mgr, req):
) )
if package is None: if package is None:
package = apt_mgr.get_package_for_paths( package = apt_mgr.get_package_for_paths(
[posixpath.join("/usr/lib", ".*", "pkgconfig", req.module + ".pc")], [posixpath.join("/usr/lib", ".*", "pkgconfig", re.escape(req.module) + "\\.pc")],
regex=True, regex=True,
) )
if package is not None: if package is not None:
@ -246,7 +247,7 @@ def resolve_c_header_req(apt_mgr, req):
) )
if package is None: if package is None:
package = apt_mgr.get_package_for_paths( package = apt_mgr.get_package_for_paths(
[posixpath.join("/usr/include", ".*", req.header)], regex=True [posixpath.join("/usr/include", ".*", re.escape(req.header))], regex=True
) )
if package is None: if package is None:
return None return None
@ -263,7 +264,7 @@ def resolve_js_runtime_req(apt_mgr, req):
def resolve_vala_package_req(apt_mgr, req): def resolve_vala_package_req(apt_mgr, req):
path = "/usr/share/vala-[0-9.]+/vapi/%s.vapi" % req.package path = "/usr/share/vala-[0-9.]+/vapi/%s\\.vapi" % re.escape(req.package)
package = apt_mgr.get_package_for_paths([path], regex=True) package = apt_mgr.get_package_for_paths([path], regex=True)
if package is not None: if package is not None:
return AptRequirement.simple(package) return AptRequirement.simple(package)
@ -274,7 +275,7 @@ def resolve_ruby_gem_req(apt_mgr, req):
paths = [ paths = [
posixpath.join( posixpath.join(
"/usr/share/rubygems-integration/all/" "/usr/share/rubygems-integration/all/"
"specifications/%s-.*\\.gemspec" % req.gem "specifications/%s-.*\\.gemspec" % re.escape(req.gem)
) )
] ]
package = apt_mgr.get_package_for_paths(paths, regex=True) package = apt_mgr.get_package_for_paths(paths, regex=True)
@ -285,7 +286,7 @@ def resolve_ruby_gem_req(apt_mgr, req):
def resolve_go_package_req(apt_mgr, req): def resolve_go_package_req(apt_mgr, req):
package = apt_mgr.get_package_for_paths( package = apt_mgr.get_package_for_paths(
[posixpath.join("/usr/share/gocode/src", req.package, ".*")], regex=True [posixpath.join("/usr/share/gocode/src", re.escape(req.package), ".*")], regex=True
) )
if package is not None: if package is not None:
return AptRequirement.simple(package) return AptRequirement.simple(package)
@ -309,7 +310,7 @@ def resolve_php_class_req(apt_mgr, req):
def resolve_r_package_req(apt_mgr, req): def resolve_r_package_req(apt_mgr, req):
paths = [posixpath.join("/usr/lib/R/site-library/.*/R/%s$" % req.package)] paths = [posixpath.join("/usr/lib/R/site-library/.*/R/%s$" % re.escape(req.package))]
package = apt_mgr.get_package_for_paths(paths, regex=True) package = apt_mgr.get_package_for_paths(paths, regex=True)
if package is not None: if package is not None:
return AptRequirement.simple(package) return AptRequirement.simple(package)
@ -318,9 +319,9 @@ def resolve_r_package_req(apt_mgr, req):
def resolve_node_package_req(apt_mgr, req): def resolve_node_package_req(apt_mgr, req):
paths = [ paths = [
"/usr/share/nodejs/.*/node_modules/%s/package.json" % req.package, "/usr/share/nodejs/.*/node_modules/%s/package\\.json" % req.package,
"/usr/lib/nodejs/%s/package.json" % req.package, "/usr/lib/nodejs/%s/package\\.json" % re.escape(req.package),
"/usr/share/nodejs/%s/package.json" % req.package, "/usr/share/nodejs/%s/package\\.json" % re.escape(req.package),
] ]
pkg_name = apt_mgr.get_package_for_paths(paths, regex=True) pkg_name = apt_mgr.get_package_for_paths(paths, regex=True)
if pkg_name is not None: if pkg_name is not None:
@ -330,10 +331,10 @@ def resolve_node_package_req(apt_mgr, req):
def resolve_library_req(apt_mgr, req): def resolve_library_req(apt_mgr, req):
paths = [ paths = [
posixpath.join("/usr/lib/lib%s.so$" % req.library), posixpath.join("/usr/lib/lib%s.so$" % re.escape(req.library)),
posixpath.join("/usr/lib/.*/lib%s.so$" % req.library), posixpath.join("/usr/lib/.*/lib%s.so$" % re.escape(req.library)),
posixpath.join("/usr/lib/lib%s.a$" % req.library), posixpath.join("/usr/lib/lib%s.a$" % re.escape(req.library)),
posixpath.join("/usr/lib/.*/lib%s.a$" % req.library), posixpath.join("/usr/lib/.*/lib%s.a$" % re.escape(req.library)),
] ]
pkg_name = apt_mgr.get_package_for_paths(paths, regex=True) pkg_name = apt_mgr.get_package_for_paths(paths, regex=True)
if pkg_name is not None: if pkg_name is not None:
@ -349,7 +350,7 @@ def resolve_ruby_file_req(apt_mgr, req):
paths = [ paths = [
posixpath.join( posixpath.join(
r"/usr/share/rubygems-integration/all/gems/([^/]+)/" r"/usr/share/rubygems-integration/all/gems/([^/]+)/"
"lib/%s.rb" % req.filename "lib/%s\\.rb" % re.escape(req.filename)
) )
] ]
pkg_name = apt_mgr.get_package_for_paths(paths, regex=True) pkg_name = apt_mgr.get_package_for_paths(paths, regex=True)
@ -379,7 +380,7 @@ def resolve_xml_entity_req(apt_mgr, req):
def resolve_sprockets_file_req(apt_mgr, req): def resolve_sprockets_file_req(apt_mgr, req):
if req.content_type == "application/javascript": if req.content_type == "application/javascript":
path = "/usr/share/.*/app/assets/javascripts/%s.js$" % req.name path = "/usr/share/.*/app/assets/javascripts/%s\\.js$" % re.escape(req.name)
else: else:
logging.warning("unable to handle content type %s", req.content_type) logging.warning("unable to handle content type %s", req.content_type)
return None return None
@ -409,7 +410,7 @@ def resolve_java_class_req(apt_mgr, req):
def resolve_haskell_package_req(apt_mgr, req): def resolve_haskell_package_req(apt_mgr, req):
path = "/var/lib/ghc/package.conf.d/%s-.*.conf" % req.deps[0][0] path = "/var/lib/ghc/package\\.conf\\.d/%s-.*\\.conf" % re.escape(req.deps[0][0])
pkg_name = apt_mgr.get_package_for_paths([path], regex=True) pkg_name = apt_mgr.get_package_for_paths([path], regex=True)
if pkg_name is not None: if pkg_name is not None:
return AptRequirement.simple(pkg_name) return AptRequirement.simple(pkg_name)
@ -453,7 +454,7 @@ def resolve_gnome_common_req(apt_mgr, req):
def resolve_jdk_file_req(apt_mgr, req): def resolve_jdk_file_req(apt_mgr, req):
path = req.jdk_path + ".*/" + req.filename path = re.escape(req.jdk_path) + ".*/" + re.escape(req.filename)
pkg_name = apt_mgr.get_package_for_paths([path], regex=True) pkg_name = apt_mgr.get_package_for_paths([path], regex=True)
if pkg_name is not None: if pkg_name is not None:
return AptRequirement.simple(pkg_name) return AptRequirement.simple(pkg_name)
@ -544,7 +545,7 @@ def resolve_python_package_req(apt_mgr, req):
def resolve_cargo_crate_req(apt_mgr, req): def resolve_cargo_crate_req(apt_mgr, req):
paths = [ paths = [
'/usr/share/cargo/registry/%s-[0-9]+.*/Cargo.toml' % req.crate] '/usr/share/cargo/registry/%s-[0-9]+.*/Cargo.toml' % re.escape(req.crate)]
pkg_name = apt_mgr.get_package_for_paths(paths, regex=True) pkg_name = apt_mgr.get_package_for_paths(paths, regex=True)
if pkg_name is None: if pkg_name is None:
return None return None