From 62d1c672f333ef1b393bf434a438f19dabc2fba6 Mon Sep 17 00:00:00 2001 From: Jan Berkel Date: Thu, 14 Dec 2017 21:58:06 +0100 Subject: [PATCH 1/3] whitelist some open-source firebase libs --- fdroidserver/scanner.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index cad0026b..3886d0f8 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -69,9 +69,18 @@ def scan_source(build_dir, build): ] } + whitelisted = [ + 'firebase-jobdispatcher', # https://github.com/firebase/firebase-jobdispatcher-android/blob/master/LICENSE + 'com.firebaseui', # https://github.com/firebase/FirebaseUI-Android/blob/master/LICENSE + 'geofire-android' # https://github.com/firebase/geofire-java/blob/master/LICENSE + ] + + def is_whitelisted(s): + return any(wl in s for wl in whitelisted) + def suspects_found(s): for n, r in usual_suspects.items(): - if r.match(s): + if r.match(s) and not is_whitelisted(s): yield n gradle_mavenrepo = re.compile(r'maven *{ *(url)? *[\'"]?([^ \'"]*)[\'"]?') @@ -198,7 +207,7 @@ def scan_source(build_dir, build): elif ext == 'jar': for name in suspects_found(curfile): - count += handleproblem('usual supect \'%s\'' % name, path_in_build_dir, filepath) + count += handleproblem('usual suspect \'%s\'' % name, path_in_build_dir, filepath) if curfile == 'gradle-wrapper.jar': removeproblem('gradle-wrapper.jar', path_in_build_dir, filepath) else: @@ -224,7 +233,7 @@ def scan_source(build_dir, build): for i, line in enumerate(lines): if is_used_by_gradle(line): for name in suspects_found(line): - count += handleproblem('usual supect \'%s\' at line %d' % (name, i + 1), path_in_build_dir, filepath) + count += handleproblem('usual suspect \'%s\' at line %d' % (name, i + 1), path_in_build_dir, filepath) noncomment_lines = [l for l in lines if not common.gradle_comment.match(l)] joined = re.sub(r'[\n\r\s]+', ' ', ' '.join(noncomment_lines)) for m in gradle_mavenrepo.finditer(joined): From 5dee23f7a608f1e9fb6bb854ab7ce4820865186f Mon Sep 17 00:00:00 2001 From: Jan Berkel Date: Fri, 15 Dec 2017 00:29:38 +0100 Subject: [PATCH 2/3] Add a simple test for scanner --- tests/scanner.TestCase | 33 +++++++++++++++++++ .../firebase-suspect/app/build.gradle | 5 +++ .../firebase-suspect/build.gradle | 11 +++++++ .../firebase-whitelisted/app/build.gradle | 5 +++ .../firebase-whitelisted/build.gradle | 14 ++++++++ 5 files changed, 68 insertions(+) create mode 100755 tests/scanner.TestCase create mode 100644 tests/source-files/firebase-suspect/app/build.gradle create mode 100644 tests/source-files/firebase-suspect/build.gradle create mode 100644 tests/source-files/firebase-whitelisted/app/build.gradle create mode 100644 tests/source-files/firebase-whitelisted/build.gradle diff --git a/tests/scanner.TestCase b/tests/scanner.TestCase new file mode 100755 index 00000000..ec220f4b --- /dev/null +++ b/tests/scanner.TestCase @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + +import unittest +import optparse +from pathlib import Path +from os.path import basename, dirname, realpath + +from fdroidserver import scanner +from fdroidserver.metadata import Build +import fdroidserver.common + + +class ScannerTest(unittest.TestCase): + def test_scan_source_files(self): + source_files = Path(dirname(realpath(__file__)), 'source-files') + projects = { + 'Zillode': 1, + 'firebase-suspect': 1 + } + for d in source_files.iterdir(): + fatal_problems = scanner.scan_source(d, Build()) + self.assertEqual(projects.get(basename(d), 0), fatal_problems) + + +if __name__ == "__main__": + parser = optparse.OptionParser() + parser.add_option("-v", "--verbose", action="store_true", default=False, + help="Spew out even more information than normal") + (fdroidserver.common.options, args) = parser.parse_args(['--verbose']) + + newSuite = unittest.TestSuite() + newSuite.addTest(unittest.makeSuite(ScannerTest)) + unittest.main(failfast=False) diff --git a/tests/source-files/firebase-suspect/app/build.gradle b/tests/source-files/firebase-suspect/app/build.gradle new file mode 100644 index 00000000..440d75a6 --- /dev/null +++ b/tests/source-files/firebase-suspect/app/build.gradle @@ -0,0 +1,5 @@ +dependencies { + compile 'com.google.firebase:firebase-core:11.6.2' + + testCompile 'junit:junit:4.12' +} diff --git a/tests/source-files/firebase-suspect/build.gradle b/tests/source-files/firebase-suspect/build.gradle new file mode 100644 index 00000000..47295bbb --- /dev/null +++ b/tests/source-files/firebase-suspect/build.gradle @@ -0,0 +1,11 @@ +buildscript { + dependencies { + classpath 'com.android.tools.build:gradle:2.3.3' + } +} + +allprojects { + repositories { + maven { url "https://maven.google.com" } + } +} diff --git a/tests/source-files/firebase-whitelisted/app/build.gradle b/tests/source-files/firebase-whitelisted/app/build.gradle new file mode 100644 index 00000000..e97e2316 --- /dev/null +++ b/tests/source-files/firebase-whitelisted/app/build.gradle @@ -0,0 +1,5 @@ +dependencies { + compile 'com.firebase:firebase-jobdispatcher:0.8.4' + + testCompile 'junit:junit:4.12' +} diff --git a/tests/source-files/firebase-whitelisted/build.gradle b/tests/source-files/firebase-whitelisted/build.gradle new file mode 100644 index 00000000..e52ed0ac --- /dev/null +++ b/tests/source-files/firebase-whitelisted/build.gradle @@ -0,0 +1,14 @@ +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.3.3' + } +} + +allprojects { + repositories { + jcenter() + } +} From 365834d3ea949d72703f5a9a7bc3eb79345e5cc1 Mon Sep 17 00:00:00 2001 From: Jan Berkel Date: Fri, 15 Dec 2017 00:47:57 +0100 Subject: [PATCH 3/3] Convert to string --- tests/scanner.TestCase | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/scanner.TestCase b/tests/scanner.TestCase index ec220f4b..874d1ad4 100755 --- a/tests/scanner.TestCase +++ b/tests/scanner.TestCase @@ -17,7 +17,7 @@ class ScannerTest(unittest.TestCase): 'Zillode': 1, 'firebase-suspect': 1 } - for d in source_files.iterdir(): + for d in (str(p) for p in source_files.iterdir()): fatal_problems = scanner.scan_source(d, Build()) self.assertEqual(projects.get(basename(d), 0), fatal_problems)