- Fixed integer overflows which could cause out-of-bounds reads or writes
instead of an error if a very large byte offset was passed to
oidnReadBuffer,oidnWriteBufferoroidnSetFilterImage, or a very large
pixel or row stride was passed tooidnSetFilterImageor
oidnSetSharedFilterImage - Fixed
oidnSetSharedFilterImageaccepting a byte offset large enough to
make the address of the image overflow instead of returning an error - Fixed
oidnSetFilterImageandoidnSetSharedFilterImagetruncating the
width and height of the image to 32 bits, which could silently denoise a
much smaller image instead of returning an error - Fixed a crash if a null array of command queues was passed to
oidnNewMetalDevice, which now returns an error instead - Fixed leaking the imported memory object on CUDA and HIP devices if
oidnNewSharedBufferFromFDoroidnNewSharedBufferFromWin32Handlefailed
after the handle had already been imported - Fixed
oidnReadBufferandoidnWriteBufferfailing with an out-of-memory
error on Metal devices if the specified byte size was 0 - Fixed a signed integer overflow when denoising very large single-channel
images, close to the maximum supported number of pixels - Fixed out-of-bounds reads and crashes caused by insufficient validation of
the weights blob set withoidnSetSharedFilterData, which could occur if
the blob was corrupted or malicious - Fixed a crash (division by zero) if the weights blob set with
oidnSetSharedFilterDatacontained a tensor with a zero dimension - Fixed changes to other filter parameters being discarded when setting an
empty data parameter withoidnSetSharedFilterData, which could cause the
filter to be executed with an outdated model, corrupting the output image or
crashing - Fixed crashes and incorrect output if committing a filter failed due to
running out of memory, which could also break the other filters of the
device. Executing such a filter now returns an error instead, and the filter
can be recovered by committing it again