@@ -4258,12 +4258,23 @@ bool ThreadState::ExecuteInstruction(DebugAPIWrapper *apiWrapper,
4258
4258
4259
4259
result.type = baseType;
4260
4260
result.rows = (uint8_t )countElems;
4261
- backingMemory += offset;
4262
- m_Memory.m_AllocPointers [resultId] = {ptrId, backingMemory, size};
4263
4261
4264
4262
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
+ }
4267
4278
break ;
4268
4279
}
4269
4280
case Operation::Bitcast:
@@ -5641,15 +5652,21 @@ void ThreadState::UpdateMemoryVariableFromBackingMemory(Id memoryId, const void
5641
5652
{
5642
5653
RDCASSERTEQUAL (baseMemory.rows , 1 );
5643
5654
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));
5646
5660
}
5647
5661
else
5648
5662
{
5649
5663
for (uint32_t i = 0 ; i < baseMemory.members .size (); ++i)
5650
5664
{
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));
5653
5670
src += elementSize;
5654
5671
}
5655
5672
}
0 commit comments