Author: bago
Date: Mon Sep 13 19:42:40 2010
New Revision: 996664

URL: http://svn.apache.org/viewvc?rev=996664&view=rev
Log:
Catch IllegalArgumentExceptions on signature parsing (validation) and throws a 
permerror with a meaningfull description (DKIM-20)

Added:
    
james/jdkim/trunk/main/src/test/resources/org/apache/james/jdkim/corpus/FAIL_illegalargumentexception.eml
Modified:
    
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
    
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java

Modified: 
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java?rev=996664&r1=996663&r2=996664&view=diff
==============================================================================
--- 
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java 
(original)
+++ 
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/DKIMVerifier.java 
Mon Sep 13 19:42:40 2010
@@ -140,6 +140,8 @@ public class DKIMVerifier extends DKIMCo
                             "AUID in subdomain of SDID is not allowed by the 
public key record.", sign.getIdentity().toString());
                 }
             }
+        } catch (IllegalArgumentException e) {
+            throw new PermFailException("Invalid public key: "+e.getMessage(), 
sign.getIdentity().toString());
         } catch (IllegalStateException e) {
             throw new PermFailException("Invalid public key: "+e.getMessage(), 
sign.getIdentity().toString());
         }
@@ -213,11 +215,11 @@ public class DKIMVerifier extends DKIMCo
         Message message;
         try {
             message = new Message(is);
-                       try {
-                   return verify(message, message.getBodyInputStream());
-                       } finally {
-                               message.dispose();
-                       }
+            try {
+                return verify(message, message.getBodyInputStream());
+            } finally {
+                message.dispose();
+            }
         } catch (MimeException e1) {
             throw new PermFailException("Mime parsing exception: "
                     + e1.getMessage(), e1);
@@ -267,7 +269,7 @@ public class DKIMVerifier extends DKIMCo
                         // validate
                         signatureRecord.validate();
                     } catch (IllegalStateException e) {
-                        throw new PermFailException(e.getMessage());
+                        throw new PermFailException("Invalid signature record: 
"+e.getMessage(), e);
                     }
 
                     // Specification say we MAY refuse to verify the signature.

Modified: 
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java?rev=996664&r1=996663&r2=996664&view=diff
==============================================================================
--- 
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java
 (original)
+++ 
james/jdkim/trunk/main/src/main/java/org/apache/james/jdkim/tagvalue/SignatureRecordImpl.java
 Mon Sep 13 19:42:40 2010
@@ -64,7 +64,15 @@ public class SignatureRecordImpl extends
                             + getValue("v"));
         if (getValue("h").length() == 0)
             throw new IllegalStateException("Tag h= cannot be empty.");
-        if (!getIdentity().toString().toLowerCase().endsWith(
+        
+        CharSequence identity;
+        try {
+            identity = getIdentity();
+        } catch (IllegalArgumentException e) {
+            throw new IllegalStateException("Identity (i=) declaration cannot 
be parsed. Probably due to missing quoted printable encoding", e);
+        }
+        
+        if (!identity.toString().toLowerCase().endsWith(
                 ("@" + getValue("d")).toLowerCase())
                 && !getIdentity().toString().toLowerCase().endsWith(
                         ("." + getValue("d")).toLowerCase()))
@@ -141,6 +149,12 @@ public class SignatureRecordImpl extends
         return identity.subSequence(0, pAt);
     }
 
+    /**
+     * This may throws IllegalArgumentException on invalid "i" content,
+     * but should always happen during validation!
+     * 
+     * @see org.apache.james.jdkim.api.SignatureRecord#getIdentity()
+     */
     public CharSequence getIdentity() {
         return dkimQuotedPrintableDecode(getValue("i"));
     }

Added: 
james/jdkim/trunk/main/src/test/resources/org/apache/james/jdkim/corpus/FAIL_illegalargumentexception.eml
URL: 
http://svn.apache.org/viewvc/james/jdkim/trunk/main/src/test/resources/org/apache/james/jdkim/corpus/FAIL_illegalargumentexception.eml?rev=996664&view=auto
==============================================================================
--- 
james/jdkim/trunk/main/src/test/resources/org/apache/james/jdkim/corpus/FAIL_illegalargumentexception.eml
 (added)
+++ 
james/jdkim/trunk/main/src/test/resources/org/apache/james/jdkim/corpus/FAIL_illegalargumentexception.eml
 Mon Sep 13 19:42:40 2010
@@ -0,0 +1,8 @@
+DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=ci; 
d=mail00.mothernature.com;
+       i=verpprefix-marianlock=40myway.com-41-=-bou...@mail00.mothernature.com;
+       h=content-type:mime-version:subject:reply-to:to:from:date:message-id;
+       bh=ekMAA3CEnMULLuaou7f1rwNKOWE=;
+       
b=RitHFsttMnawzJ+R3MxiUQBLbLGIiNiKg/eYQauu6nykqV56zHW9ra4yXt3a5r3P5KZYkunzuvqeGH/YJn9OIg==;
+Subject: IllegalArgumentException on invalid i attribute qp encoding.
+
+Mangled body.



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to