You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2022/12/15 02:54:38 UTC

[james-jspf] branch master updated: [FIX] AsynchronousSPFExecutor should handle null continuation and CompletionExceotions

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 512e89a  [FIX] AsynchronousSPFExecutor should handle null continuation and CompletionExceotions
512e89a is described below

commit 512e89ae46b5bc2056780e01898e0cd93d980d8f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Dec 9 09:41:48 2022 +0700

    [FIX] AsynchronousSPFExecutor should handle null continuation and CompletionExceotions
---
 .../jspf/executor/AsynchronousSPFExecutor.java     | 24 +++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java b/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java
index ac8836d..2ec4e9d 100644
--- a/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java
+++ b/resolver/src/main/java/org/apache/james/jspf/executor/AsynchronousSPFExecutor.java
@@ -54,9 +54,12 @@ public class AsynchronousSPFExecutor implements SPFExecutor {
         while ((checker = session.popChecker()) != null) {
             // only execute checkers we added (better recursivity)
             LOGGER.debug("Executing checker: {}", checker);
-            final SPFChecker finalChecker = checker;
+            SPFChecker finalChecker = checker;
             try {
-                final DNSLookupContinuation cont = checker.checkSPF(session);
+                DNSLookupContinuation cont = checker.checkSPF(session);
+                if (cont == null) {
+                    continue;
+                }
                 // if the checker returns a continuation we return it
                 dnsProbe.getRecordsAsync(cont.getRequest())
                     .thenAccept(results -> {
@@ -68,11 +71,10 @@ public class AsynchronousSPFExecutor implements SPFExecutor {
                     })
                     .exceptionally(e -> {
                         if (e instanceof TimeoutException) {
-                            try {
-                                cont.getListener().onDNSResponse(new DNSResponse((TimeoutException) e), session);
-                            } catch (PermErrorException | NoneException | TempErrorException | NeutralException ex2) {
-                                handleError(session, finalChecker, ex2);
-                            }
+                            handleTimeout(session, finalChecker, cont, (TimeoutException) e);
+                        }
+                        if (e.getCause() instanceof TimeoutException) {
+                            handleTimeout(session, finalChecker, cont, (TimeoutException) e.getCause());
                         }
                         return null;
                     });
@@ -83,6 +85,14 @@ public class AsynchronousSPFExecutor implements SPFExecutor {
         result.setSPFResult(session);
     }
 
+    private void handleTimeout(SPFSession session, SPFChecker finalChecker, DNSLookupContinuation cont, TimeoutException e) {
+        try {
+            cont.getListener().onDNSResponse(new DNSResponse(e), session);
+        } catch (PermErrorException | NoneException | TempErrorException | NeutralException ex2) {
+            handleError(session, finalChecker, ex2);
+        }
+    }
+
     private void handleError(SPFSession session, SPFChecker checker, Exception e) {
         while (e != null) {
             while (checker == null || !(checker instanceof SPFCheckerExceptionCatcher)) {


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