From 763240bd659f2e1fc6c769ff72702ebd368cf5e3 Mon Sep 17 00:00:00 2001
From: M66B <M66B@users.noreply.github.com>
Date: Wed, 11 Dec 2024 21:53:34 +0100
Subject: [PATCH] Added type checks

---
 .../eu/faircode/email/EntityCertificate.java  | 47 ++++++++++---------
 1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/app/src/main/java/eu/faircode/email/EntityCertificate.java b/app/src/main/java/eu/faircode/email/EntityCertificate.java
index f861d0b353..bd08db0a41 100644
--- a/app/src/main/java/eu/faircode/email/EntityCertificate.java
+++ b/app/src/main/java/eu/faircode/email/EntityCertificate.java
@@ -192,25 +192,27 @@ public class EntityCertificate {
             Collection<List<?>> altNames = certificate.getSubjectAlternativeNames();
             if (altNames != null)
                 for (List altName : altNames)
-                    if (altName.get(0).equals(GeneralName.rfc822Name))
-                        result.add((String) altName.get(1));
-                    else if (altName.get(0).equals(GeneralName.otherName) && altName.get(1) instanceof byte[])
-                        try {
-                            ASN1InputStream decoder = new ASN1InputStream((byte[]) altName.get(1));
-                            DLTaggedObject encoded = (DLTaggedObject) decoder.readObject();
-                            String otherName = DERUTF8String.getInstance(
-                                    ((DLTaggedObject) ((DLSequence) encoded.getBaseObject())
-                                            .getObjectAt(1)).getBaseObject()).getString();
-                            int at = otherName.indexOf('@');
-                            int dot = otherName.lastIndexOf('.');
-                            if (at >= 0 && dot > at) // UTF-8 accepted, so basic test only
-                                result.add(otherName);
-                            else
-                                Log.w("Ignoring otherName=" + otherName);
-                        } catch (Throwable ex) {
-                            Log.w(ex);
-                        }
-                    else
+                    if (altName.get(0).equals(GeneralName.rfc822Name)) {
+                        if (altName.get(1) instanceof String)
+                            result.add((String) altName.get(1));
+                    } else if (altName.get(0).equals(GeneralName.otherName)) {
+                        if (altName.get(1) instanceof byte[])
+                            try {
+                                ASN1InputStream decoder = new ASN1InputStream((byte[]) altName.get(1));
+                                DLTaggedObject encoded = (DLTaggedObject) decoder.readObject();
+                                String otherName = DERUTF8String.getInstance(
+                                        ((DLTaggedObject) ((DLSequence) encoded.getBaseObject())
+                                                .getObjectAt(1)).getBaseObject()).getString();
+                                int at = otherName.indexOf('@');
+                                int dot = otherName.lastIndexOf('.');
+                                if (at >= 0 && dot > at) // UTF-8 accepted, so basic test only
+                                    result.add(otherName);
+                                else
+                                    Log.w("Ignoring otherName=" + otherName);
+                            } catch (Throwable ex) {
+                                Log.w(ex);
+                            }
+                    } else
                         Log.i("Alt type=" + altName.get(0) + " data=" + altName.get(1));
         } catch (CertificateParsingException ex) {
             Log.e(ex);
@@ -252,9 +254,10 @@ public class EntityCertificate {
 
         for (List altName : altNames)
             try {
-                if (altName.get(0).equals(GeneralName.dNSName))
-                    result.add((String) altName.get(1));
-                else if (altName.get(0).equals(GeneralName.iPAddress))
+                if (altName.get(0).equals(GeneralName.dNSName)) {
+                    if (altName.get(1) instanceof String)
+                        result.add((String) altName.get(1));
+                } else if (altName.get(0).equals(GeneralName.iPAddress))
                     if (altName.get(1) instanceof String)
                         result.add((String) altName.get(1));
                     else {