This is an automated email from the ASF dual-hosted git repository.

chibenwa pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-jdkim.git

commit 71bc837b59179574c127a91f0f48fc44eec26f2e
Author: Benoit TELLIER <[email protected]>
AuthorDate: Fri Oct 30 08:54:21 2026 +0100

    [FIX] DNSPublicKeyRecordRetriever: report a failing lookup as a TempFail
    
    Anything Lookup#run() threw escaped getRecords(): dnsjava 3.6.3 throws
    IndexOutOfBoundsException while normalizing some malformed answers. The
    verifier then reported an unexpected PermFail instead of a temporary
    DNS error, and direct callers got an undeclared exception. Runtime
    exceptions of the lookup are now turned into a TempFailException.
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
---
 .../james/jdkim/impl/DNSPublicKeyRecordRetriever.java    |  8 +++++++-
 .../apache/james/jdkim/DNSPublicKeyRetrieverTest.java    | 16 ++++++++++++++++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git 
a/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
 
b/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
index 65141a3..e396806 100644
--- 
a/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
+++ 
b/main/src/main/java/org/apache/james/jdkim/impl/DNSPublicKeyRecordRetriever.java
@@ -64,7 +64,13 @@ public class DNSPublicKeyRecordRetriever implements 
PublicKeyRecordRetriever {
         }
         query.setResolver(resolver);
 
-        Record[] rr = query.run();
+        Record[] rr;
+        try {
+            rr = query.run();
+        } catch (RuntimeException e) {
+            // dnsjava may fail this way on a malformed answer: treat it as a 
DNS error
+            throw new TempFailException("DNS lookup failed: " + 
e.getMessage());
+        }
 
         if (query.getResult() == Lookup.TRY_AGAIN) {
             throw new TempFailException(query.getErrorString());
diff --git 
a/main/src/test/java/org/apache/james/jdkim/DNSPublicKeyRetrieverTest.java 
b/main/src/test/java/org/apache/james/jdkim/DNSPublicKeyRetrieverTest.java
index 21d75d8..34920b7 100644
--- a/main/src/test/java/org/apache/james/jdkim/DNSPublicKeyRetrieverTest.java
+++ b/main/src/test/java/org/apache/james/jdkim/DNSPublicKeyRetrieverTest.java
@@ -19,6 +19,10 @@
 
 package org.apache.james.jdkim;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import org.xbill.DNS.SimpleResolver;
+import org.xbill.DNS.Resolver;
+import org.xbill.DNS.Message;
 import org.apache.james.jdkim.api.PublicKeyRecord;
 import org.apache.james.jdkim.api.PublicKeyRecordRetriever;
 import org.apache.james.jdkim.api.VerifierOptions;
@@ -118,4 +122,16 @@ public class DNSPublicKeyRetrieverTest {
 
     }
 
+    @Test
+    public void runtimeExceptionFromTheResolverShouldBeATempFail() throws 
Exception {
+        Resolver resolver = new SimpleResolver("127.0.0.1") {
+            @Override
+            public Message send(Message query) {
+                throw new IndexOutOfBoundsException("malformed answer");
+            }
+        };
+
+        assertThatThrownBy(() -> new 
DNSPublicKeyRecordRetriever(resolver).getRecords("dns/txt", "sel", 
"example.com"))
+                .isInstanceOf(TempFailException.class);
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to