lib/{curl,upnp}: add more exception handlers
Bugs found by Coverity.
This commit is contained in:
@@ -174,15 +174,19 @@ UPnPDeviceDirectory::OnAlive(Upnp_Discovery *disco) noexcept
|
||||
{
|
||||
if (isMSDevice(disco->DeviceType) ||
|
||||
isCDService(disco->ServiceType)) {
|
||||
auto *downloader = new Downloader(*this, *disco);
|
||||
|
||||
try {
|
||||
downloader->Start();
|
||||
} catch (...) {
|
||||
BlockingCall(GetEventLoop(), [downloader](){
|
||||
downloader->Destroy();
|
||||
});
|
||||
auto *downloader = new Downloader(*this, *disco);
|
||||
|
||||
try {
|
||||
downloader->Start();
|
||||
} catch (...) {
|
||||
BlockingCall(GetEventLoop(), [downloader](){
|
||||
downloader->Destroy();
|
||||
});
|
||||
|
||||
throw;
|
||||
}
|
||||
} catch (...) {
|
||||
LogError(std::current_exception());
|
||||
return UPNP_E_SUCCESS;
|
||||
}
|
||||
@@ -251,7 +255,7 @@ UPnPDeviceDirectory::ExpireDevices()
|
||||
|
||||
UPnPDeviceDirectory::UPnPDeviceDirectory(EventLoop &event_loop,
|
||||
UpnpClient_Handle _handle,
|
||||
UPnPDiscoveryListener *_listener) noexcept
|
||||
UPnPDiscoveryListener *_listener)
|
||||
:curl(event_loop), handle(_handle),
|
||||
listener(_listener)
|
||||
{
|
||||
|
@@ -110,7 +110,11 @@ class UPnPDeviceDirectory final : UpnpCallback {
|
||||
|
||||
private:
|
||||
void OnDeferredStart() noexcept {
|
||||
request.Start();
|
||||
try {
|
||||
request.Start();
|
||||
} catch (...) {
|
||||
OnError(std::current_exception());
|
||||
}
|
||||
}
|
||||
|
||||
/* virtual methods from CurlResponseHandler */
|
||||
@@ -147,7 +151,7 @@ class UPnPDeviceDirectory final : UpnpCallback {
|
||||
|
||||
public:
|
||||
UPnPDeviceDirectory(EventLoop &event_loop, UpnpClient_Handle _handle,
|
||||
UPnPDiscoveryListener *_listener=nullptr) noexcept;
|
||||
UPnPDiscoveryListener *_listener=nullptr);
|
||||
~UPnPDeviceDirectory() noexcept;
|
||||
|
||||
UPnPDeviceDirectory(const UPnPDeviceDirectory &) = delete;
|
||||
|
Reference in New Issue
Block a user