[Android-tools-devel] Bug#1058331: android-platform-tools-base: additional information

Vladimir Petko vpa1977 at gmail.com
Thu Mar 7 20:47:35 GMT 2024


Package: android-platform-tools-base
Followup-For: Bug #1058331
User: ubuntu-devel at lists.ubuntu.com
Usertags: origin-ubuntu noble ubuntu-patch
Control: tags -1 patch

Dear Maintainer,

I apologise for submitting it as a debdiff, salsa repository appears to be out
of date.

The attached patch resolves ftbfs due to the internal sun.security and
BouncyCastle API changes.

In Ubuntu, the attached patch was applied to achieve the following:

  * Resolve the failure to build from source (LP: #2056088):
    - d/p/{der-output-stream.patch, add-exports.patch}: sun.security
      PKCS7 class now only supports encoding to DerOutputStream.
      Explicitly instantiate it.
    - d/p/bouncycastle177-compat.patch: use ASN1OutputStream instead
      of remove DerOutputStream.


Thanks for considering the patch.


-- System Information:
Debian Release: trixie/sid
  APT prefers mantic-updates
  APT policy: (500, 'mantic-updates'), (500, 'mantic-security'), (500, 'mantic'), (100, 'mantic-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 6.5.0-21-generic (SMP w/32 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
-------------- next part --------------
diff -Nru android-platform-tools-base-2.2.2/debian/patches/add-exports.patch android-platform-tools-base-2.2.2/debian/patches/add-exports.patch
--- android-platform-tools-base-2.2.2/debian/patches/add-exports.patch	2023-02-03 03:01:58.000000000 +1300
+++ android-platform-tools-base-2.2.2/debian/patches/add-exports.patch	2024-03-06 13:16:37.000000000 +1300
@@ -5,7 +5,7 @@
  }
  
 +compileJava {
-+    options.compilerArgs << '--add-exports' << 'java.base/sun.security.pkcs=ALL-UNNAMED' << '--add-exports' << 'java.base/sun.security.x509=ALL-UNNAMED'
++    options.compilerArgs << '--add-exports' << 'java.base/sun.security.pkcs=ALL-UNNAMED' << '--add-exports' << 'java.base/sun.security.x509=ALL-UNNAMED' << '--add-exports' << 'java.base/sun.security.util=ALL-UNNAMED'
 +}
 +
  task initSdkForTests(type: JavaExec) {
diff -Nru android-platform-tools-base-2.2.2/debian/patches/bouncycastle177-compat.patch android-platform-tools-base-2.2.2/debian/patches/bouncycastle177-compat.patch
--- android-platform-tools-base-2.2.2/debian/patches/bouncycastle177-compat.patch	1970-01-01 12:00:00.000000000 +1200
+++ android-platform-tools-base-2.2.2/debian/patches/bouncycastle177-compat.patch	2024-03-06 13:16:37.000000000 +1300
@@ -0,0 +1,57 @@
+Description: bouncycastle 1.77 compatibility patch
+ Remove usages of DerOutputStream that is no longer public.
+Author: Vladimir Petko <vladimir.petko at canonical.com>
+Bug-Ubuntu: https://bugs.launchpad.net/debian/+source/android-platform-tools-base/+bug/2056088
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1058331
+Forwarded: not-needed
+Last-Update: 2024-03-06
+
+--- a/build-system/builder/src/main/java/com/android/builder/internal/packaging/sign/SignatureExtension.java
++++ b/build-system/builder/src/main/java/com/android/builder/internal/packaging/sign/SignatureExtension.java
+@@ -29,7 +29,8 @@
+ 
+ import org.apache.commons.codec.binary.Base64;
+ import org.bouncycastle.asn1.ASN1InputStream;
+-import org.bouncycastle.asn1.DEROutputStream;
++import org.bouncycastle.asn1.ASN1OutputStream;
++import org.bouncycastle.asn1.ASN1Encoding;
+ import org.bouncycastle.cert.jcajce.JcaCertStore;
+ import org.bouncycastle.cms.CMSException;
+ import org.bouncycastle.cms.CMSProcessableByteArray;
+@@ -610,12 +611,12 @@
+         /*
+          * DEROutputStream is not closeable! OMG!
+          */
+-        DEROutputStream dos = null;
++        ASN1OutputStream dos = null;
+         try (ASN1InputStream asn1 = new ASN1InputStream(sigData.getEncoded())) {
+-            dos = new DEROutputStream(outputBytes);
++            dos = ASN1OutputStream.create(outputBytes, ASN1Encoding.DER);
+             dos.writeObject(asn1.readObject());
+ 
+-            DEROutputStream toClose = dos;
++            ASN1OutputStream toClose = dos;
+             dos = null;
+             toClose.close();
+         } catch (IOException e) {
+--- a/build-system/builder/src/main/java/com/android/builder/signing/SignedJarApkCreator.java
++++ b/build-system/builder/src/main/java/com/android/builder/signing/SignedJarApkCreator.java
+@@ -33,7 +33,8 @@
+ import com.google.common.io.Files;
+ 
+ import org.bouncycastle.asn1.ASN1InputStream;
+-import org.bouncycastle.asn1.DEROutputStream;
++import org.bouncycastle.asn1.ASN1OutputStream;
++import org.bouncycastle.asn1.ASN1Encoding;
+ import org.bouncycastle.cert.jcajce.JcaCertStore;
+ import org.bouncycastle.cms.CMSException;
+ import org.bouncycastle.cms.CMSProcessableByteArray;
+@@ -400,7 +401,7 @@
+         CMSSignedData sigData = gen.generate(data, false);
+ 
+         try (ASN1InputStream asn1 = new ASN1InputStream(sigData.getEncoded())) {
+-            DEROutputStream dos = new DEROutputStream(mOutputJar);
++            ASN1OutputStream dos = ASN1OutputStream.create(mOutputJar, ASN1Encoding.DER);
+             try {
+                 dos.writeObject(asn1.readObject());
+             } finally {
diff -Nru android-platform-tools-base-2.2.2/debian/patches/der-output-stream.patch android-platform-tools-base-2.2.2/debian/patches/der-output-stream.patch
--- android-platform-tools-base-2.2.2/debian/patches/der-output-stream.patch	1970-01-01 12:00:00.000000000 +1200
+++ android-platform-tools-base-2.2.2/debian/patches/der-output-stream.patch	2024-03-06 13:16:37.000000000 +1300
@@ -0,0 +1,30 @@
+Description: workaround removal of pkcs7.encodeSignedData(OutputStream)
+  pkcs7.encodeSignedData(OutputStream) was removed in Java 21.
+  Explicitly instantiate DerOutputStream to encode pkcs7 contents.
+Author: Vladimir Petko <vladimir.petko at canonical.com>
+Bug-Ubuntu: https://bugs.launchpad.net/debian/+source/android-platform-tools-base/+bug/2056088
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1058331
+Forwarded: not-needed
+Last-Update: 2024-03-06
+
+--- a/sdklib/src/main/java/com/android/sdklib/internal/build/SignedJarBuilder.java
++++ b/sdklib/src/main/java/com/android/sdklib/internal/build/SignedJarBuilder.java
+@@ -25,6 +25,7 @@
+ import sun.security.pkcs.SignerInfo;
+ import sun.security.x509.AlgorithmId;
+ import sun.security.x509.X500Name;
++import sun.security.util.DerOutputStream;
+
+ import java.io.BufferedOutputStream;
+ import java.io.ByteArrayOutputStream;
+@@ -394,6 +395,9 @@
+                 new X509Certificate[] { publicKey },
+                 new SignerInfo[] { signerInfo });
+
+-        pkcs7.encodeSignedData(mOutputJar);
++        try (DerOutputStream derout = new DerOutputStream()) {
++            pkcs7.encodeSignedData(derout);
++            mOutputJar.write(derout.toByteArray());
++        }
+     }
+ }
diff -Nru android-platform-tools-base-2.2.2/debian/patches/series android-platform-tools-base-2.2.2/debian/patches/series
--- android-platform-tools-base-2.2.2/debian/patches/series	2023-02-03 03:01:58.000000000 +1300
+++ android-platform-tools-base-2.2.2/debian/patches/series	2024-03-06 13:16:37.000000000 +1300
@@ -22,3 +22,5 @@
 ecj-compatibility.patch
 asm-dependency.patch
 add-exports.patch
+der-output-stream.patch
+bouncycastle177-compat.patch


More information about the Android-tools-devel mailing list