Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/literal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,10 @@ Result FloatParser<T>::Parse(LiteralType literal_type,
// static
template <typename T>
void FloatWriter<T>::WriteHex(char* out, size_t size, Uint bits) {
if (size == 0) {
return;
}

static constexpr int kNumNybbles = Traits::kBits / 4;
static constexpr int kTopNybbleShift = Traits::kBits - 4;
static constexpr Uint kTopNybble = Uint(0xf) << kTopNybbleShift;
Expand Down Expand Up @@ -811,6 +815,10 @@ void WriteDoubleHex(char* buffer, size_t size, uint64_t bits) {
}

void WriteUint128(char* buffer, size_t size, v128 bits) {
if (size == 0) {
return;
}

uint64_t digits;
uint64_t remainder;
char reversed_buffer[40];
Expand Down
17 changes: 17 additions & 0 deletions src/test-literal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ using namespace wabt;

namespace {

TEST(WriteHexTest, ZeroSizeDoesNotAccessOutput) {
char output = 'x';

WriteFloatHex(&output, 0, 0);
EXPECT_EQ('x', output);

WriteDoubleHex(&output, 0, 0);
EXPECT_EQ('x', output);
}

enum ParseIntTypeCombo {
UnsignedOnly,
SignedAndUnsigned,
Expand Down Expand Up @@ -853,6 +863,13 @@ TEST(WriteUint128, Basic) {
AssertWriteUint128Equals({0, 0, 1, 0}, "18446744073709551616");
}

TEST(WriteUint128, ZeroSizeDoesNotAccessOutput) {
char output = 'x';

WriteUint128(&output, 0, {0, 0, 0, 0});
EXPECT_EQ('x', output);
}

TEST(WriteUint128, BufferTooSmall) {
{
char buffer[20];
Expand Down
Loading