make ascii armor parsing more resiliant

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/crypto/PgpEngine.java | 2 
src/main/java/eu/siacs/conversations/utils/AsciiArmor.java | 9 ++++++-
2 files changed, 8 insertions(+), 3 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/crypto/PgpEngine.java 🔗

@@ -164,7 +164,7 @@ public class PgpEngine {
         params.setAction(OpenPgpApi.ACTION_DECRYPT_VERIFY);
         try {
             params.putExtra(OpenPgpApi.RESULT_DETACHED_SIGNATURE, AsciiArmor.decode(signature));
-        } catch (final IllegalArgumentException e) {
+        } catch (final Exception e) {
             Log.d(Config.LOGTAG, "unable to parse signature", e);
             return 0;
         }

src/main/java/eu/siacs/conversations/utils/AsciiArmor.java 🔗

@@ -14,8 +14,13 @@ public class AsciiArmor {
         final List<String> lines = Splitter.on('\n').splitToList(Strings.nullToEmpty(input).trim());
         if (lines.size() == 1) {
             final String line = lines.get(0);
-            final String cleaned = line.substring(0, line.lastIndexOf("="));
-            return BaseEncoding.base64().decode(cleaned);
+            if (line.length() > 1) {
+                final int end = line.lastIndexOf('=');
+                if (end >= 1) {
+                    final String cleaned = line.substring(0, end);
+                    return BaseEncoding.base64().decode(cleaned);
+                }
+            }
         }
         final String withoutChecksum;
         if (Iterables.getLast(lines).charAt(0) == '=') {