Merge branch 'use-NoOverwriteDict-when-needed' into 'master'

only use NoOverwriteDict workaround when Androguard needs it

See merge request fdroid/fdroidserver!1833
This commit is contained in:
Michael Pöhn
2026-06-03 21:51:43 +00:00

View File

@@ -3504,23 +3504,22 @@ def get_first_signer_certificate(apkpath):
.(RSA|DSA|EC) against the corresponding signature file .SF
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#280
NoOverwriteDict is a workaround for:
https://github.com/androguard/androguard/issues/1030
Lots more discusion here:
https://gitlab.com/fdroid/fdroidserver/-/issues/1128
"""
class NoOverwriteDict(dict):
def __setitem__(self, k, v):
if k not in self:
super().__setitem__(k, v)
cert_encoded = None
found_certs = []
apkobject = get_androguard_APK(apkpath)
apkobject._v2_blocks = NoOverwriteDict()
if isinstance(apkobject._v2_blocks, dict):
# Fixed in Androguard v4.1.4. NoOverwriteDict is a workaround for:
# https://github.com/androguard/androguard/issues/1030
class NoOverwriteDict(dict):
def __setitem__(self, k, v):
if k not in self:
super().__setitem__(k, v)
apkobject._v2_blocks = NoOverwriteDict()
certs_v3 = apkobject.get_certificates_der_v3()
if certs_v3:
cert_v3 = certs_v3[0]