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): diff --git a/tests/scanner.TestCase b/tests/scanner.TestCase new file mode 100755 index 00000000..874d1ad4 --- /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 (str(p) for p 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() + } +}