From 7e17f8b0cdb8e44ffee865c93e5f32eb63042b8a Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 3 Jun 2026 16:18:27 +0200 Subject: [PATCH] only use NoOverwriteDict workaround when Androguard needs it Now that https://github.com/androguard/androguard/pull/1128 has been released in androguard v4.1.4, this code should not override the upstream fix. https://gitlab.com/fdroid/fdroidserver/-/jobs/14671739625/viewer https://github.com/androguard/androguard/issues/1030 --- fdroidserver/common.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 9e3ef794..e798da9b 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -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]