File pdns-3.4.10-webserver-164689.patch of Package pdns.6226
--- a/pdns/webserver.cc
+++ a/pdns/webserver.cc
@@ -32,8 +32,8 @@
#include <yahttp/router.hpp>
struct connectionThreadData {
- WebServer* webServer;
- Socket* client;
+ WebServer* webServer{0};
+ Socket* client{0};
};
void HttpRequest::json(rapidjson::Document& document)
@@ -358,14 +358,31 @@ void WebServer::go()
// data and data->client will be freed by thread
connectionThreadData *data = new connectionThreadData;
data->webServer = this;
- data->client = d_server->accept();
- if (data->client->acl(acl)) {
- pthread_create(&tid, 0, &WebServerConnectionThreadStart, (void *)data);
- } else {
- ComboAddress remote;
- if (data->client->getRemote(remote))
- L<<Logger::Error<<"Webserver closing socket: remote ("<< remote.toString() <<") does not match 'webserver-allow-from'"<<endl;
- delete data->client; // close socket
+ try {
+ data->client = d_server->accept();
+ if (data->client->acl(acl)) {
+ pthread_create(&tid, 0, &WebServerConnectionThreadStart, (void *)data);
+ } else {
+ ComboAddress remote;
+ if (data->client->getRemote(remote))
+ L<<Logger::Error<<"Webserver closing socket: remote ("<< remote.toString() <<") does not match 'webserver-allow-from'"<<endl;
+ delete data->client; // close socket
+ delete data;
+ }
+ }
+ catch(PDNSException &e) {
+ L<<Logger::Error<<"PDNSException while accepting a connection in main webserver thread: "<<e.reason<<endl;
+ delete data->client;
+ delete data;
+ }
+ catch(std::exception &e) {
+ L<<Logger::Error<<"STL Exception while accepting a connection in main webserver thread: "<<e.what()<<endl;
+ delete data->client;
+ delete data;
+ }
+ catch(...) {
+ L<<Logger::Error<<"Unknown exception while accepting a connection in main webserver thread"<<endl;
+ delete data->client;
delete data;
}
}