From 859159254e39f9a075d3085448081f12ed98d528 Mon Sep 17 00:00:00 2001 From: Luca Weiss Date: Sat, 25 Jan 2020 20:23:41 +0100 Subject: [PATCH] pmb/parse/_apkbuild: wrap more calls in try-catch (!1864) Otherwise pmb crashes on some APKBUILDs, for example: source="https://files.pythonhosted.org/packages/source/${_pyname%${_pyname#?}}/$_pyname/$_pyname-$pkgver.tar.gz" --- pmb/parse/_apkbuild.py | 42 ++++++++++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/pmb/parse/_apkbuild.py b/pmb/parse/_apkbuild.py index 40565b3b..3091a21c 100644 --- a/pmb/parse/_apkbuild.py +++ b/pmb/parse/_apkbuild.py @@ -68,26 +68,36 @@ def replace_variable(apkbuild, value: str) -> str: # ${var/foo/bar}, ${var/foo/}, ${var/foo} for match in revar3.finditer(value): - newvalue = apkbuild[match.group(1)] - search = match.group(2) - replacement = match.group(3) - if replacement is None: # arg 3 is optional - replacement = "" - newvalue = newvalue.replace(search, replacement, 1) - logging.verbose("{}: replace '{}' with '{}'".format( - apkbuild["pkgname"], match.group(0), newvalue)) - value = value.replace(match.group(0), newvalue, 1) + try: + newvalue = apkbuild[match.group(1)] + search = match.group(2) + replacement = match.group(3) + if replacement is None: # arg 3 is optional + replacement = "" + newvalue = newvalue.replace(search, replacement, 1) + logging.verbose("{}: replace '{}' with '{}'".format( + apkbuild["pkgname"], match.group(0), newvalue)) + value = value.replace(match.group(0), newvalue, 1) + except KeyError: + logging.debug("{}: key '{}' for replacing '{}' not found, ignoring" + "".format(apkbuild["pkgname"], match.group(1), + match.group(0))) # ${foo#bar} rematch4 = revar4.finditer(value) for match in rematch4: - newvalue = apkbuild[match.group(1)] - substr = match.group(2) - if newvalue.startswith(substr): - newvalue = newvalue.replace(substr, "", 1) - logging.verbose("{}: replace '{}' with '{}'".format( - apkbuild["pkgname"], match.group(0), newvalue)) - value = value.replace(match.group(0), newvalue, 1) + try: + newvalue = apkbuild[match.group(1)] + substr = match.group(2) + if newvalue.startswith(substr): + newvalue = newvalue.replace(substr, "", 1) + logging.verbose("{}: replace '{}' with '{}'".format( + apkbuild["pkgname"], match.group(0), newvalue)) + value = value.replace(match.group(0), newvalue, 1) + except KeyError: + logging.debug("{}: key '{}' for replacing '{}' not found, ignoring" + "".format(apkbuild["pkgname"], match.group(1), + match.group(0))) return value