[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/5] xenagent: Use new (std::nothrow) where the result is checked for NULL


  • To: Césaire Mounah <cesaire.mounah@xxxxxxxxxx>, win-pv-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
  • Date: Tue, 20 Oct 2026 14:21:13 +0200
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=vates.tech header.i="@vates.tech" header.h="From:Subject:Date:Message-ID:To:MIME-Version:Content-Type:In-Reply-To:References:Feedback-ID"
  • Delivery-date: Tue, 20 Oct 2026 12:21:20 +0000
  • Feedback-id: default:8631fc262581453bbf619ec5b2062170:Sweego
  • List-id: Developer list for the Windows PV Drivers subproject <win-pv-devel.lists.xenproject.org>

On 20/10/2026 13:55, Césaire Mounah wrote:
> Plain operator new throws std::bad_alloc instead of returning NULL, so
> the NULL checks after these allocations were dead code. Use the nothrow
> form so that the existing failure paths are taken on allocation failure.
> 
> Assisted-By: Claude:Claude-Opus-5.5
> Signed-off-by: Césaire Mounah <cesaire.mounah@xxxxxxxxxx>

Reviewed-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>

> ---
>   src/xenagent/convdevice.cpp     | 3 ++-
>   src/xenagent/devicelist.cpp     | 3 ++-
>   src/xenagent/xenifacedevice.cpp | 7 ++++---
>   3 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/src/xenagent/convdevice.cpp b/src/xenagent/convdevice.cpp
> index 5a25be1..b77fe5b 100644
> --- a/src/xenagent/convdevice.cpp
> +++ b/src/xenagent/convdevice.cpp
> @@ -34,6 +34,7 @@
>   #include <stdio.h>
>   #include <powrprof.h>
>   #include <winuser.h>
> +#include <new>
>   
>   #include "service.h"
>   #include "convdevice.h"
> @@ -154,7 +155,7 @@ CConvDeviceList::CConvDeviceList(CXenAgent* agent) : 
> CDeviceList(GUID_GPIOBUTTON
>   
>   /*virtual*/ CDevice* CConvDeviceList::Create(const wchar_t* path)
>   {
> -    return new CConvDevice(path);
> +    return new (std::nothrow) CConvDevice(path);
>   }
>   
>   /*virtual*/ void CConvDeviceList::OnDeviceAdded(CDevice* dev)
> diff --git a/src/xenagent/devicelist.cpp b/src/xenagent/devicelist.cpp
> index d6af5d4..8bf9b2b 100644
> --- a/src/xenagent/devicelist.cpp
> +++ b/src/xenagent/devicelist.cpp
> @@ -31,6 +31,7 @@
>   
>   #include <windows.h>
>   #include <string>
> +#include <new>
>   #include <setupapi.h>
>   #pragma comment (lib , "setupapi.lib" )
>   
> @@ -247,7 +248,7 @@ void CDeviceList::EnumerateDevices()
>                                           0,
>                                           &len,
>                                           NULL);
> -        detail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)new BYTE[len];
> +        detail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)new (std::nothrow) 
> BYTE[len];
>           if (detail == NULL)
>               continue;
>           detail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
> diff --git a/src/xenagent/xenifacedevice.cpp b/src/xenagent/xenifacedevice.cpp
> index f81a838..763abf0 100644
> --- a/src/xenagent/xenifacedevice.cpp
> +++ b/src/xenagent/xenifacedevice.cpp
> @@ -33,6 +33,7 @@
>   #include <windows.h>
>   #include <winioctl.h>
>   #include <powrprof.h>
> +#include <new>
>   
>   #include "service.h"
>   #include "xenifacedevice.h"
> @@ -65,7 +66,7 @@ bool CXenIfaceDevice::StoreRead(const std::string& path, 
> std::string& value)
>             NULL, 0,
>             &bytes);
>   
> -    buffer = new char[(size_t)bytes + 1];
> +    buffer = new (std::nothrow) char[(size_t)bytes + 1];
>       if (buffer == NULL)
>           return false;
>   
> @@ -85,7 +86,7 @@ bool CXenIfaceDevice::StoreWrite(const std::string& path, 
> const std::string& val
>   {
>       bool   result;
>       size_t length = path.length() + 1 + value.length() + 1 + 1;
> -    char*  buffer = new char[length];
> +    char*  buffer = new (std::nothrow) char[length];
>       if (buffer == NULL)
>           return false;
>   
> @@ -202,7 +203,7 @@ CXenIfaceDeviceList::CXenIfaceDeviceList(CXenAgent* 
> agent) : CDeviceList(GUID_IN
>   
>   /*virtual*/ CDevice* CXenIfaceDeviceList::Create(const wchar_t* path)
>   {
> -    return new CXenIfaceDevice(path);
> +    return new (std::nothrow) CXenIfaceDevice(path);
>   }
>   
>   /*virtual*/ void CXenIfaceDeviceList::OnDeviceAdded(CDevice* dev)



--
Ngoc Tu Dinh | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.