]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Hardened DoQ internal error handling for cpq 17114/head
authorRon Lauren Hombre <118486316+ronhombre@users.noreply.github.com>
Tue, 7 Apr 2026 14:04:19 +0000 (22:04 +0800)
committerGitHub <noreply@github.com>
Tue, 7 Apr 2026 14:04:19 +0000 (22:04 +0800)
Added a check for cpq before releasing DU to handle exceptional cases.

Signed-off-by: Ron Lauren Hombre <118486316+ronhombre@users.noreply.github.com>
pdns/dnsdistdist/doq.cc

index 06f0f67e3635bd3803e6d6ddfea06d7e7b8b00e5..c64bb869ee5a3d72606daf097e1ec4fa4938ac32 100644 (file)
@@ -545,9 +545,11 @@ static void processDOQQuery(DOQUnitUniquePtr&& doqUnit)
     if (downstream->passCrossProtocolQuery(std::move(cpq))) {
       return;
     }
-    // NOLINTNEXTLINE(bugprone-use-after-move): it was only moved if the call succeeded
-    unit = cpq->releaseDU();
-    handleImmediateResponse(std::move(unit), "DoQ internal error");
+    /* On exceptional cases, cpq is moved but returns false above. So we check to make sure. See https://github.com/PowerDNS/pdns/issues/17109 */
+    if (cpq) {
+      unit = cpq->releaseDU();
+      handleImmediateResponse(std::move(unit), "DoQ internal error");
+    }
     return;
   }
   catch (const std::exception& e) {