@@ -348,17 +348,25 @@ static void storeMultiPayloadValue(OpaqueValue *value,
348
348
#if defined(__BIG_ENDIAN__)
349
349
unsigned numPayloadValueBytes =
350
350
std::min (layout.payloadSize , sizeof (payloadValue));
351
- memcpy (bytes,
351
+ memcpy (bytes + sizeof (OpaqueValue *) - numPayloadValueBytes ,
352
352
reinterpret_cast <char *>(&payloadValue) + 4 - numPayloadValueBytes,
353
353
numPayloadValueBytes);
354
+ if (layout.payloadSize > sizeof (payloadValue) &&
355
+ layout.payloadSize > sizeof (OpaqueValue *)) {
356
+ memset (bytes, 0 ,
357
+ sizeof (OpaqueValue *) - numPayloadValueBytes);
358
+ memset (bytes + sizeof (OpaqueValue *), 0 ,
359
+ layout.payloadSize - sizeof (OpaqueValue *));
360
+ }
354
361
#else
355
362
memcpy (bytes, &payloadValue,
356
363
std::min (layout.payloadSize , sizeof (payloadValue)));
357
- # endif
364
+
358
365
// If the payload is larger than the value, zero out the rest.
359
366
if (layout.payloadSize > sizeof (payloadValue))
360
367
memset (bytes + sizeof (payloadValue), 0 ,
361
368
layout.payloadSize - sizeof (payloadValue));
369
+ #endif
362
370
}
363
371
364
372
static unsigned loadMultiPayloadTag (const OpaqueValue *value,
@@ -384,7 +392,7 @@ static unsigned loadMultiPayloadValue(const OpaqueValue *value,
384
392
unsigned numPayloadValueBytes =
385
393
std::min (layout.payloadSize , sizeof (payloadValue));
386
394
memcpy (reinterpret_cast <char *>(&payloadValue) + 4 - numPayloadValueBytes,
387
- bytes, numPayloadValueBytes);
395
+ bytes + sizeof (OpaqueValue *) - numPayloadValueBytes , numPayloadValueBytes);
388
396
#else
389
397
memcpy (&payloadValue, bytes,
390
398
std::min (layout.payloadSize , sizeof (payloadValue)));
0 commit comments