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]
