@@ -4258,12 +4258,23 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper,
42584258
42594259 result.type = baseType;
42604260 result.rows = (uint8_t )countElems;
4261- backingMemory += offset;
4262- m_Memory.m_AllocPointers [resultId] = {ptrId, backingMemory, size};
42634261
42644262 RDCASSERT (offset + size <= alloc.size );
4265- RDCASSERT (size < sizeof (result.value .f32v ));
4266- memcpy (&result.value .f32v [0 ], backingMemory, size);
4263+ if (offset + size <= alloc.size )
4264+ {
4265+ backingMemory += offset;
4266+ m_Memory.m_AllocPointers [resultId] = {ptrId, backingMemory, size};
4267+
4268+ RDCASSERT (size < sizeof (result.value .f32v ));
4269+ if (size < sizeof (ShaderValue))
4270+ memcpy (&result.value , backingMemory, size);
4271+ else
4272+ RDCERR (" Size %u too large MAX %u for GetElementPtr" , size, sizeof (ShaderValue));
4273+ }
4274+ else
4275+ {
4276+ RDCERR (" Invalid GEP offset %u size %u for alloc size %u" , offset, size, alloc.size );
4277+ }
42674278 break ;
42684279 }
42694280 case Operation::Bitcast:
@@ -5641,15 +5652,21 @@ void ThreadState::UpdateMemoryVariableFromBackingMemory(Id memoryId, const void
56415652 {
56425653 RDCASSERTEQUAL (baseMemory.rows , 1 );
56435654 RDCASSERTEQUAL (baseMemory.columns , 1 );
5644- RDCASSERT (elementSize < sizeof (ShaderValue), elementSize);
5645- memcpy (&baseMemory.value .f32v [0 ], src, elementSize);
5655+ if (elementSize < sizeof (ShaderValue))
5656+ memcpy (&baseMemory.value , src, elementSize);
5657+ else
5658+ RDCERR (" Updating MemoryVariable elementSize %u too large max %u" , elementSize,
5659+ sizeof (ShaderValue));
56465660 }
56475661 else
56485662 {
56495663 for (uint32_t i = 0 ; i < baseMemory.members .size (); ++i)
56505664 {
5651- RDCASSERT (elementSize < sizeof (ShaderValue), elementSize);
5652- memcpy (&baseMemory.members [i].value .f32v [0 ], src, elementSize);
5665+ if (elementSize < sizeof (ShaderValue))
5666+ memcpy (&baseMemory.members [i].value , src, elementSize);
5667+ else
5668+ RDCERR (" Updating MemoryVariable member %u elementSize %u too large max %u" , i, elementSize,
5669+ sizeof (ShaderValue));
56535670 src += elementSize;
56545671 }
56555672 }
0 commit comments