Fail check-boot-jars if boot jar contains 0 .class files

Protect against an invalid boot jar, e.g. one containing .dex files is
used instead of .class files.

Test: add a prebuilt for framework-tethering
      Run `m check-boot-jars` with the first fix from
	  https://r.android.com/1341756 and the build fails due to no
	  .class files because a dex jar is used.
	  Run `m check-boot-jars` with all fixeds from
	  https://r.android.com/1341756 and the build works.
Bug: 158304459
Bug: 159112414
Merged-In: I0e8ebd318312949bc58ba7a5c89f9e265b8bedf2
Change-Id: I0e8ebd318312949bc58ba7a5c89f9e265b8bedf2
(cherry picked from 92d41de8f2)
This commit is contained in:
Paul Duffin 2020-06-17 17:22:40 +01:00
parent 03db4fbbb7
commit 70dd47f0df

View file

@ -49,8 +49,10 @@ def CheckJar(allow_list_path, jar):
if p.returncode != 0:
return False
items = stdout.split()
classes = 0
for f in items:
if f.endswith('.class'):
classes += 1
package_name = os.path.dirname(f)
package_name = package_name.replace('/', '.')
if not package_name or not allow_list_re.match(package_name):
@ -58,6 +60,9 @@ def CheckJar(allow_list_path, jar):
' not in the allow list %s of packages allowed on the bootclasspath.'
% (jar, f, package_name, allow_list_path))
return False
if classes == 0:
print >> sys.stderr, ('Error: %s does not contain any class files.' % jar)
return False
return True