Skip to content

Commit f58ca9b

Browse files
committed
Added size limit check for buffer stride
1 parent 1970895 commit f58ca9b

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

kernels/common/rtcore.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1857,6 +1857,9 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
18571857
if (itemCount > 0xFFFFFFFFu)
18581858
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"buffer too large");
18591859

1860+
if (byteStride > 0xFFFFFFFFu)
1861+
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"stride too large");
1862+
18601863
geometry->setBuffer(type, slot, format, buffer, byteOffset, byteStride, (unsigned int)itemCount);
18611864
RTC_CATCH_END2(geometry);
18621865
}
@@ -1871,6 +1874,9 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
18711874
if (itemCount > 0xFFFFFFFFu)
18721875
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"buffer too large");
18731876

1877+
if (byteStride > 0xFFFFFFFFu)
1878+
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"stride too large");
1879+
18741880
Ref<Buffer> buffer = new Buffer(geometry->device, itemCount*byteStride, (char*)ptr + byteOffset);
18751881
geometry->setBuffer(type, slot, format, buffer, 0, byteStride, (unsigned int)itemCount);
18761882
RTC_CATCH_END2(geometry);
@@ -1889,6 +1895,9 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
18891895
if (itemCount > 0xFFFFFFFFu)
18901896
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"buffer too large");
18911897

1898+
if (byteStride > 0xFFFFFFFFu)
1899+
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"stride too large");
1900+
18921901
if ((ptr == nullptr) || (dptr == nullptr))
18931902
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"host and device pointer may not be NULL pointers when using SYCL devices");
18941903

@@ -1916,6 +1925,9 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
19161925
if (itemCount > 0xFFFFFFFFu)
19171926
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"buffer too large");
19181927

1928+
if (byteStride > 0xFFFFFFFFu)
1929+
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"stride too large");
1930+
19191931
/* vertex buffers need to get overallocated slightly as elements are accessed using SSE loads */
19201932
size_t bytes = itemCount*byteStride;
19211933
if (type == RTC_BUFFER_TYPE_VERTEX || type == RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE)
@@ -1941,6 +1953,9 @@ RTC_API void rtcSetGeometryTransform(RTCGeometry hgeometry, unsigned int timeSte
19411953
if (itemCount > 0xFFFFFFFFu)
19421954
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"buffer too large");
19431955

1956+
if (byteStride > 0xFFFFFFFFu)
1957+
throw_RTCError(RTC_ERROR_INVALID_ARGUMENT,"stride too large");
1958+
19441959
/* vertex buffers need to get overallocated slightly as elements are accessed using SSE loads */
19451960
size_t bytes = itemCount*byteStride;
19461961
if (bufferType == RTC_BUFFER_TYPE_VERTEX || bufferType == RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE)

0 commit comments

Comments
 (0)