]> granicus.if.org Git - pdns/commitdiff
Revert "Rearrange; to avoid uninitialized var and bail out after exception,"
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Mon, 8 Jul 2019 09:16:29 +0000 (11:16 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Tue, 9 Jul 2019 09:09:55 +0000 (11:09 +0200)
This reverts commit cb22b82e6e97374e0eadcc03c56dd8e7f1328bf3.

(cherry picked from commit 73428b7a2ff4824176bdcf1edd271d9888c3dd4d)

pdns/communicator.hh

index 831b2cecf534bbd6c16cfe4e72e7b4b08c6808d9..2cb0f70feb3c5e8ed22777f62d96fce8c6421f2d 100644 (file)
@@ -258,25 +258,26 @@ public:
     this->resolve_name(&addresses, name);
     
     if(b) {
-      b->lookup(QType(QType::ANY),name);
-      while (true) {
-        try {
+        b->lookup(QType(QType::ANY),name);
+        bool ok;
+        do {
           DNSZoneRecord rr;
-          if (!b->get(rr))
-            break;
-          if (rr.dr.d_type == QType::A || rr.dr.d_type == QType::AAAA)
-            addresses.push_back(rr.dr.d_content->getZoneRepresentation());   // SOL if you have a CNAME for an NS
-        }
-        // After an exception, b can be inconsistent so break
-        catch (PDNSException &ae) {
-          g_log << Logger::Error << "Skipping record(s): " << ae.reason << endl;
-          break;
-        }
-        catch (std::exception &e) {
-          g_log << Logger::Error << "Skipping record(s): " << e.what() << endl;
-          break;
-        }
-      }
+          try {
+            ok = b->get(rr);
+          }
+          catch (PDNSException &ae) {
+            g_log << Logger::Error << "Skipping record: " << ae.reason << endl;
+            continue;
+          }
+          catch (std::exception &e) {
+            g_log << Logger::Error << "Skipping record: " << e.what() << endl;
+            continue;
+          }
+          if (ok) {
+            if (rr.dr.d_type == QType::A || rr.dr.d_type == QType::AAAA)
+              addresses.push_back(rr.dr.d_content->getZoneRepresentation());   // SOL if you have a CNAME for an NS
+          }
+        } while (ok);
     }
     return addresses;
   }