From 763240bd659f2e1fc6c769ff72702ebd368cf5e3 Mon Sep 17 00:00:00 2001 From: M66B 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> 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 {