static int appendSignedDecimal(char **Buffer, const char *BufferEnd, s64 Num,
u8 MinNumberLength, bool PadWithZero) {
const bool Negative = (Num < 0);
- return appendNumber(Buffer, BufferEnd,
- static_cast<u64>(Negative ? -Num : Num), 10,
- MinNumberLength, PadWithZero, Negative,
- /*Upper=*/false);
+ const u64 UnsignedNum = (Num == INT64_MIN)
+ ? static_cast<u64>(INT64_MAX) + 1
+ : static_cast<u64>(Negative ? -Num : Num);
+ return appendNumber(Buffer, BufferEnd, UnsignedNum, 10, MinNumberLength,
+ PadWithZero, Negative, /*Upper=*/false);
}
// Use the fact that explicitly requesting 0 Width (%0s) results in UB and
CHECK(!((Precision >= 0 || LeftJustified) && *Cur != 's'));
switch (*Cur) {
case 'd': {
- DVal = HaveLL ? va_arg(Args, s64)
- : HaveZ ? va_arg(Args, sptr) : va_arg(Args, int);
+ DVal = HaveLL ? va_arg(Args, s64)
+ : HaveZ ? va_arg(Args, sptr)
+ : va_arg(Args, int);
Res += appendSignedDecimal(&Buffer, BufferEnd, DVal, Width, PadWithZero);
break;
}
case 'u':
case 'x':
case 'X': {
- UVal = HaveLL ? va_arg(Args, u64)
- : HaveZ ? va_arg(Args, uptr) : va_arg(Args, unsigned);
+ UVal = HaveLL ? va_arg(Args, u64)
+ : HaveZ ? va_arg(Args, uptr)
+ : va_arg(Args, unsigned);
const bool Upper = (*Cur == 'X');
Res += appendUnsigned(&Buffer, BufferEnd, UVal, (*Cur == 'u') ? 10 : 16,
Width, PadWithZero, Upper);
using AllocatorT = TestAllocator<Config>;
auto Allocator = std::unique_ptr<AllocatorT>(new AllocatorT());
- EXPECT_FALSE(Allocator->isOwned(&Mutex));
- EXPECT_FALSE(Allocator->isOwned(&Allocator));
- scudo::u64 StackVariable = 0x42424242U;
- EXPECT_FALSE(Allocator->isOwned(&StackVariable));
- EXPECT_EQ(StackVariable, 0x42424242U);
+ static scudo::u8 StaticBuffer[scudo::Chunk::getHeaderSize() + 1];
+ EXPECT_FALSE(
+ Allocator->isOwned(&StaticBuffer[scudo::Chunk::getHeaderSize()]));
+
+ scudo::u8 StackBuffer[scudo::Chunk::getHeaderSize() + 1];
+ for (scudo::uptr I = 0; I < sizeof(StackBuffer); I++)
+ StackBuffer[I] = 0x42U;
+ EXPECT_FALSE(Allocator->isOwned(&StackBuffer[scudo::Chunk::getHeaderSize()]));
+ for (scudo::uptr I = 0; I < sizeof(StackBuffer); I++)
+ EXPECT_EQ(StackBuffer[I], 0x42U);
constexpr scudo::uptr MinAlignLog = FIRST_32_SECOND_64(3U, 4U);