chiark / gitweb /
support manually adding per-build antiFeatures in metadata
authorHans-Christoph Steiner <hans@eds.org>
Tue, 27 Jun 2017 21:55:38 +0000 (23:55 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Thu, 6 Jul 2017 10:25:48 +0000 (12:25 +0200)
For cases like the OpenVPN vuln that was recently announced, it is useful
for fdroiddata maintainers to be able to mark builds that have known
vulnerabilities.

.gitlab-ci.yml
fdroidserver/metadata.py
fdroidserver/update.py
tests/metadata.TestCase
tests/metadata/com.politedroid.txt
tests/metadata/dump/com.politedroid.yaml [new file with mode: 0644]
tests/metadata/dump/org.adaway.yaml
tests/metadata/dump/org.smssecure.smssecure.yaml
tests/metadata/dump/org.videolan.vlc.yaml
tests/update.TestCase

index c14f4c24d211253155d6888a10950afc1c5a6b48..b49592cb2afede99cbea57104d44938229f49be8 100644 (file)
@@ -28,6 +28,7 @@ metadata_v0:
     - "sed -i -e '/AuthorWebSite/d'
              -e '/Description: No description available/d'
              -e \"/Description: ''/d\"
+             -e '/antifeatures:/d'
              -e '/buildozer:/d'
              metadata/dump_*/*.yaml"
     - diff -uw metadata/dump_*
index 254791f2c8b9a55287c89777644b1073417459b8..d832fd0cc39d32ec28f6a505055367a0618ceb52 100644 (file)
@@ -230,6 +230,7 @@ build_flags_order = [
     'gradleprops',
     'antcommands',
     'novcheck',
+    'antifeatures',
 ]
 
 # old .txt format has version name/code inline in the 'Build:' line
@@ -271,6 +272,7 @@ class Build(dict):
         self.gradleprops = []
         self.antcommands = []
         self.novcheck = False
+        self.antifeatures = []
         if copydict:
             super().__init__(copydict)
             return
@@ -339,6 +341,7 @@ flagtypes = {
     'forceversion': TYPE_BOOL,
     'forcevercode': TYPE_BOOL,
     'novcheck': TYPE_BOOL,
+    'antifeatures': TYPE_LIST,
 }
 
 
index a82645cf2bb1410b669dc8613a761d35cb3e65f4..267e66fe79dbed57c34973e198cbf62e424c5a7c 100644 (file)
@@ -593,6 +593,40 @@ def insert_obbs(repodir, apps, apks):
                 break
 
 
+def translate_per_build_anti_features(apps, apks):
+    """Grab the anti-features list from the build metadata
+
+    For most Anti-Features, they are really most applicable per-APK,
+    not for an app.  An app can fix a vulnerability, add/remove
+    tracking, etc.  This reads the 'antifeatures' list from the Build
+    entries in the fdroiddata metadata file, then transforms it into
+    the 'antiFeatures' list of unique items for the index.
+
+    The field key is all lower case in the metadata file to match the
+    rest of the Build fields.  It is 'antiFeatures' camel case in the
+    implementation, index, and fdroidclient since it is translated
+    from the build 'antifeatures' field, not directly included.
+
+    """
+
+    antiFeatures = dict()
+    for packageName, app in apps.items():
+        d = dict()
+        for build in app['builds']:
+            afl = build.get('antifeatures')
+            if afl:
+                d[int(build.versionCode)] = afl
+        if len(d) > 0:
+            antiFeatures[packageName] = d
+
+    for apk in apks:
+        d = antiFeatures.get(apk['packageName'])
+        if d:
+            afl = d.get(apk['versionCode'])
+            if afl:
+                apk['antiFeatures'].update(afl)
+
+
 def _get_localized_dict(app, locale):
     '''get the dict to add localized store metadata to'''
     if 'localized' not in app:
@@ -1751,6 +1785,7 @@ def main():
     copy_triple_t_store_metadata(apps)
     insert_obbs(repodirs[0], apps, apks)
     insert_localized_app_metadata(apps)
+    translate_per_build_anti_features(apps, apks)
 
     # Scan the archive repo for apks as well
     if len(repodirs) > 1:
index ee113287726b64a752ebf133ec6470bc8db13b1e..f3d580775806140411e9b1d1a7ac643313ca1d51 100755 (executable)
@@ -43,14 +43,16 @@ class MetadataTest(unittest.TestCase):
         fdroidserver.common.config = config
 
         apps = fdroidserver.metadata.read_metadata(xref=True)
-        for appid in ('org.smssecure.smssecure', 'org.adaway', 'org.videolan.vlc'):
+        for appid in ('org.smssecure.smssecure', 'org.adaway',
+                      'org.videolan.vlc', 'com.politedroid'):
             savepath = os.path.join('metadata', 'dump', appid + '.yaml')
             frommeta = dict(apps[appid])
             self.assertTrue(appid in apps)
             with open(savepath, 'r') as f:
                 frompickle = yaml.load(f)
             self.assertEqual(frommeta, frompickle)
-            # Uncomment to overwrite
+            # comment above assert and uncomment below to update test
+            # files when new metadata fields are added
             # with open(savepath, 'w') as f:
             #     yaml.add_representer(fdroidserver.metadata.Build, _build_yaml_representer)
             #     yaml.dump(frommeta, f, default_flow_style=False)
index 526be7871ba10bf168b3db1418478c69182c764d..404073c61c7bd7a5ff2ec17fb9c0da0a1efab0f4 100644 (file)
@@ -16,6 +16,7 @@ Repo:https://github.com/miguelvps/PoliteDroid.git
 Build:1.2,3
     commit=6a548e4b19
     target=android-10
+    antifeatures=KnownVuln,UpstreamNonFree,NonFreeAssets
 
 Build:1.3,4
     commit=ad865b57bf3ac59580f38485608a9b1dda4fa7dc
diff --git a/tests/metadata/dump/com.politedroid.yaml b/tests/metadata/dump/com.politedroid.yaml
new file mode 100644 (file)
index 0000000..84ee21e
--- /dev/null
@@ -0,0 +1,178 @@
+AntiFeatures: []
+ArchivePolicy: 4 versions
+AuthorEmail: null
+AuthorName: null
+AuthorWebSite: null
+AutoName: Polite Droid
+AutoUpdateMode: Version v%v
+Binaries: null
+Bitcoin: null
+Categories:
+- Time
+Changelog: ''
+CurrentVersion: '1.5'
+CurrentVersionCode: '6'
+Description: Activates silent mode during calendar events.
+Disabled: null
+Donate: null
+FlattrID: null
+IssueTracker: https://github.com/miguelvps/PoliteDroid/issues
+License: GPL-3.0
+Litecoin: null
+MaintainerNotes: ''
+Name: null
+NoSourceSince: ''
+Provides: null
+Repo: https://github.com/miguelvps/PoliteDroid.git
+RepoType: git
+RequiresRoot: false
+SourceCode: https://github.com/miguelvps/PoliteDroid
+Summary: Calendar tool
+UpdateCheckData: null
+UpdateCheckIgnore: null
+UpdateCheckMode: Tags
+UpdateCheckName: null
+VercodeOperation: null
+WebSite: ''
+added: null
+builds:
+- androidupdate: []
+  antcommands: []
+  antifeatures:
+  - KnownVuln
+  - UpstreamNonFree
+  - NonFreeAssets
+  build: ''
+  buildjni: []
+  buildozer: false
+  commit: 6a548e4b19
+  disable: false
+  encoding: null
+  extlibs: []
+  forcevercode: false
+  forceversion: false
+  gradle: []
+  gradleprops: []
+  init: ''
+  kivy: false
+  maven: false
+  ndk: null
+  novcheck: false
+  oldsdkloc: false
+  output: null
+  patch: []
+  preassemble: []
+  prebuild: ''
+  rm: []
+  scandelete: []
+  scanignore: []
+  srclibs: []
+  subdir: null
+  submodules: false
+  target: android-10
+  versionCode: '3'
+  versionName: '1.2'
+- androidupdate: []
+  antcommands: []
+  antifeatures: []
+  build: ''
+  buildjni: []
+  buildozer: false
+  commit: ad865b57bf3ac59580f38485608a9b1dda4fa7dc
+  disable: false
+  encoding: null
+  extlibs: []
+  forcevercode: false
+  forceversion: false
+  gradle: []
+  gradleprops: []
+  init: ''
+  kivy: false
+  maven: false
+  ndk: null
+  novcheck: false
+  oldsdkloc: false
+  output: null
+  patch: []
+  preassemble: []
+  prebuild: ''
+  rm: []
+  scandelete: []
+  scanignore: []
+  srclibs: []
+  subdir: null
+  submodules: false
+  target: android-15
+  versionCode: '4'
+  versionName: '1.3'
+- androidupdate: []
+  antcommands: []
+  antifeatures: []
+  build: ''
+  buildjni: []
+  buildozer: false
+  commit: 456bd615f3fbe6dff06433928cf7ea20073601fb
+  disable: false
+  encoding: null
+  extlibs: []
+  forcevercode: false
+  forceversion: false
+  gradle: []
+  gradleprops: []
+  init: ''
+  kivy: false
+  maven: false
+  ndk: null
+  novcheck: false
+  oldsdkloc: false
+  output: null
+  patch: []
+  preassemble: []
+  prebuild: ''
+  rm: []
+  scandelete: []
+  scanignore: []
+  srclibs: []
+  subdir: null
+  submodules: false
+  target: android-10
+  versionCode: '5'
+  versionName: '1.4'
+- androidupdate: []
+  antcommands: []
+  antifeatures: []
+  build: ''
+  buildjni: []
+  buildozer: false
+  commit: v1.5
+  disable: false
+  encoding: null
+  extlibs: []
+  forcevercode: false
+  forceversion: false
+  gradle:
+  - 'yes'
+  gradleprops: []
+  init: ''
+  kivy: false
+  maven: false
+  ndk: null
+  novcheck: false
+  oldsdkloc: false
+  output: null
+  patch: []
+  preassemble: []
+  prebuild: ''
+  rm: []
+  scandelete: []
+  scanignore: []
+  srclibs: []
+  subdir: null
+  submodules: false
+  target: null
+  versionCode: '6'
+  versionName: '1.5'
+comments: {}
+id: com.politedroid
+lastUpdated: null
+metadatapath: metadata/com.politedroid.txt
index e1f3a6f39ec140ce9f1151d2962f743b2cb7559e..8ca9ded0844ba7d0fdce046980a999634ab59289 100644 (file)
@@ -61,6 +61,7 @@ added: null
 builds:
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -94,6 +95,7 @@ builds:
   versionName: '1.12'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -128,6 +130,7 @@ builds:
   versionName: '1.15'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -162,6 +165,7 @@ builds:
   versionName: '1.18'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -196,6 +200,7 @@ builds:
   versionName: '1.19'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -230,6 +235,7 @@ builds:
   versionName: '1.20'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -264,6 +270,7 @@ builds:
   versionName: '1.21'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -296,6 +303,7 @@ builds:
   versionName: '1.23'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -329,6 +337,7 @@ builds:
   versionName: '1.24'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -362,6 +371,7 @@ builds:
   versionName: '1.25'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -395,6 +405,7 @@ builds:
   versionName: '1.26'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -428,6 +439,7 @@ builds:
   versionName: '1.27'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -461,6 +473,7 @@ builds:
   versionName: '1.29'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -494,6 +507,7 @@ builds:
   versionName: '1.32'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -526,6 +540,7 @@ builds:
   versionName: '1.33'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -559,6 +574,7 @@ builds:
   versionName: '1.34'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -592,6 +608,7 @@ builds:
   versionName: '1.35'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -625,6 +642,7 @@ builds:
   versionName: '1.36'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -662,6 +680,7 @@ builds:
   - android-libs/ActionBarSherlock
   - android-libs/HtmlSpanner/htmlspanner
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -707,6 +726,7 @@ builds:
   - android-libs/ActionBarSherlock
   - android-libs/HtmlSpanner/htmlspanner
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -748,6 +768,7 @@ builds:
   versionName: '2.3'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -783,6 +804,7 @@ builds:
   versionName: '2.6'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -818,6 +840,7 @@ builds:
   versionName: '2.7'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -853,6 +876,7 @@ builds:
   versionName: '2.8'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -888,6 +912,7 @@ builds:
   versionName: 2.8.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -923,6 +948,7 @@ builds:
   versionName: '2.9'
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -958,6 +984,7 @@ builds:
   versionName: 2.9.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
@@ -993,6 +1020,7 @@ builds:
   versionName: 2.9.2
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni:
   - 'yes'
index 407aa5d980574bc241b075495346d343f3bea1d8..ce6dec688503ddf099b85046eb40b47df36b2812 100644 (file)
@@ -58,6 +58,7 @@ added: null
 builds:
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -102,6 +103,7 @@ builds:
   versionName: 0.3.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -138,6 +140,7 @@ builds:
   versionName: 0.3.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -173,6 +176,7 @@ builds:
   versionName: 0.4.2
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -208,6 +212,7 @@ builds:
   versionName: 0.5.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -242,6 +247,7 @@ builds:
   versionName: 0.5.2
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -276,6 +282,7 @@ builds:
   versionName: 0.5.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
@@ -310,6 +317,7 @@ builds:
   versionName: 0.5.4
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: ''
   buildjni: []
   buildozer: false
index 70b9d40691613a974982c0314aa97bad36899a65..52681f928b20ff08acd5f1f0e6d5c5f0fdb7e5a1 100644 (file)
@@ -63,6 +63,7 @@ builds:
   - ../java-libs/SlidingMenu
   - ../java-libs/ActionBarSherlock
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -98,6 +99,7 @@ builds:
   - ../java-libs/SlidingMenu
   - ../java-libs/ActionBarSherlock
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release
   buildjni: []
   buildozer: false
@@ -133,6 +135,7 @@ builds:
   - ../java-libs/SlidingMenu
   - ../java-libs/ActionBarSherlock
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -168,6 +171,7 @@ builds:
   - ../java-libs/SlidingMenu
   - ../java-libs/ActionBarSherlock
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=mips ./compile.sh release
   buildjni: []
   buildozer: false
@@ -200,6 +204,7 @@ builds:
   versionName: 0.0.11-mips
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=mips ./compile.sh release
   buildjni: []
   buildozer: false
@@ -234,6 +239,7 @@ builds:
   versionName: 0.1.3-MIPS
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -268,6 +274,7 @@ builds:
   versionName: 0.1.3-x86
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release
   buildjni: []
   buildozer: false
@@ -302,6 +309,7 @@ builds:
   versionName: 0.1.3-ARM
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -336,6 +344,7 @@ builds:
   versionName: 0.1.3-ARMv7
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -369,6 +378,7 @@ builds:
   versionName: 0.9.0
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -402,6 +412,7 @@ builds:
   versionName: 0.9.0
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -435,6 +446,7 @@ builds:
   versionName: 0.9.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -468,6 +480,7 @@ builds:
   versionName: 0.9.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -501,6 +514,7 @@ builds:
   versionName: 0.9.5
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -534,6 +548,7 @@ builds:
   versionName: 0.9.5
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -567,6 +582,7 @@ builds:
   versionName: 0.9.6
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -600,6 +616,7 @@ builds:
   versionName: 0.9.6
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -633,6 +650,7 @@ builds:
   versionName: 0.9.7
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -666,6 +684,7 @@ builds:
   versionName: 0.9.7
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=mips ./compile.sh release
   buildjni: []
   buildozer: false
@@ -699,6 +718,7 @@ builds:
   versionName: 0.9.7.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -732,6 +752,7 @@ builds:
   versionName: 0.9.7.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -765,6 +786,7 @@ builds:
   versionName: 0.9.7.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -798,6 +820,7 @@ builds:
   versionName: 0.9.8
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release
   buildjni: []
   buildozer: false
@@ -831,6 +854,7 @@ builds:
   versionName: 0.9.8
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -864,6 +888,7 @@ builds:
   versionName: 0.9.8
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -897,6 +922,7 @@ builds:
   versionName: 0.9.9
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release
   buildjni: []
   buildozer: false
@@ -930,6 +956,7 @@ builds:
   versionName: 0.9.9
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -963,6 +990,7 @@ builds:
   versionName: 0.9.9
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -996,6 +1024,7 @@ builds:
   versionName: 0.9.10
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release
   buildjni: []
   buildozer: false
@@ -1029,6 +1058,7 @@ builds:
   versionName: 0.9.10
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -1062,6 +1092,7 @@ builds:
   versionName: 0.9.10
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -1095,6 +1126,7 @@ builds:
   versionName: 1.0.0
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release
   buildjni: []
   buildozer: false
@@ -1128,6 +1160,7 @@ builds:
   versionName: 1.0.0
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -1161,6 +1194,7 @@ builds:
   versionName: 1.0.0
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=x86 ./compile.sh release
   buildjni: []
   buildozer: false
@@ -1194,6 +1228,7 @@ builds:
   versionName: 1.0.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release
   buildjni: []
   buildozer: false
@@ -1227,6 +1262,7 @@ builds:
   versionName: 1.0.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release
   buildjni: []
   buildozer: false
@@ -1260,6 +1296,7 @@ builds:
   versionName: 1.0.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -1295,6 +1332,7 @@ builds:
   versionName: 1.1.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -1330,6 +1368,7 @@ builds:
   versionName: 1.1.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -1365,6 +1404,7 @@ builds:
   versionName: 1.1.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -1400,6 +1440,7 @@ builds:
   versionName: 1.1.5
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -1435,6 +1476,7 @@ builds:
   versionName: 1.1.5
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -1470,6 +1512,7 @@ builds:
   versionName: 1.1.5
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -1505,6 +1548,7 @@ builds:
   versionName: 1.1.6
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -1540,6 +1584,7 @@ builds:
   versionName: 1.1.6
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -1575,6 +1620,7 @@ builds:
   versionName: 1.1.6
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -1610,6 +1656,7 @@ builds:
   versionName: 1.2.0
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -1645,6 +1692,7 @@ builds:
   versionName: 1.2.0
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -1680,6 +1728,7 @@ builds:
   versionName: 1.2.0
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -1715,6 +1764,7 @@ builds:
   versionName: 1.2.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -1750,6 +1800,7 @@ builds:
   versionName: 1.2.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -1785,6 +1836,7 @@ builds:
   versionName: 1.2.1
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -1820,6 +1872,7 @@ builds:
   versionName: 1.2.2
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -1855,6 +1908,7 @@ builds:
   versionName: 1.2.2
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -1890,6 +1944,7 @@ builds:
   versionName: 1.2.2
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -1925,6 +1980,7 @@ builds:
   versionName: 1.2.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -1960,6 +2016,7 @@ builds:
   versionName: 1.2.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -1995,6 +2052,7 @@ builds:
   versionName: 1.2.3
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -2030,6 +2088,7 @@ builds:
   versionName: 1.2.4
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -2065,6 +2124,7 @@ builds:
   versionName: 1.2.4
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -2100,6 +2160,7 @@ builds:
   versionName: 1.2.4
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -2135,6 +2196,7 @@ builds:
   versionName: 1.2.5
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -2170,6 +2232,7 @@ builds:
   versionName: 1.2.5
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
@@ -2205,6 +2268,7 @@ builds:
   versionName: 1.2.5
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi" --release
   buildjni: []
   buildozer: false
@@ -2240,6 +2304,7 @@ builds:
   versionName: 1.2.6
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "armeabi-v7a" --release
   buildjni: []
   buildozer: false
@@ -2275,6 +2340,7 @@ builds:
   versionName: 1.2.6
 - androidupdate: []
   antcommands: []
+  antifeatures: []
   build: cd ../ && ./compile.sh -a "x86" --release
   buildjni: []
   buildozer: false
index bb79a35f93d57447d1970b7c9330c0b479049acc..5bd81a8c3b335920f13cc6ef02c780983488db58 100755 (executable)
@@ -459,6 +459,38 @@ class UpdateTest(unittest.TestCase):
         self.assertIsNone(apk)
         self.assertFalse(cachechanged)
 
+    def test_translate_per_build_anti_features(self):
+        os.chdir(os.path.join(localmodule, 'tests'))
+        if os.path.basename(os.getcwd()) != 'tests':
+            raise Exception('This test must be run in the "tests/" subdir')
+
+        config = dict()
+        fdroidserver.common.fill_config_defaults(config)
+        config['ndk_paths'] = dict()
+        config['accepted_formats'] = ['json', 'txt', 'yml']
+        fdroidserver.common.config = config
+        fdroidserver.update.config = config
+
+        fdroidserver.update.options = type('', (), {})()
+        fdroidserver.update.options.clean = True
+        fdroidserver.update.options.delete_unknown = True
+        fdroidserver.update.options.rename_apks = False
+        fdroidserver.update.options.allow_disabled_algorithms = False
+
+        apps = fdroidserver.metadata.read_metadata(xref=True)
+        knownapks = fdroidserver.common.KnownApks()
+        apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False)
+        fdroidserver.update.translate_per_build_anti_features(apps, apks)
+        self.assertEqual(len(apks), 11)
+        foundtest = False
+        for apk in apks:
+            if apk['packageName'] == 'com.politedroid' and apk['versionCode'] == 3:
+                antiFeatures = apk.get('antiFeatures')
+                self.assertTrue('KnownVuln' in antiFeatures)
+                self.assertEqual(3, len(antiFeatures))
+                foundtest = True
+        self.assertTrue(foundtest)
+
 
 if __name__ == "__main__":
     parser = optparse.OptionParser()