| Index: core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp
|
| diff --git a/core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp b/core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp
|
| index 3e16bd0aa7653b4d8868e912b0ec694e690d9546..3add606509846583ceacf18543f9b49cc256991c 100644
|
| --- a/core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp
|
| +++ b/core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp
|
| @@ -20,451 +20,447 @@ static unsigned char stream_data[] = {
|
| };
|
|
|
| TEST(fxcodec, DecodeDataNullDecodeData) {
|
| - unsigned char buffer[16];
|
| - DecodeData* ptr = nullptr;
|
| -
|
| - // Error codes, not segvs, should callers pass us a NULL pointer.
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), ptr));
|
| - EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), ptr));
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(1, ptr));
|
| - EXPECT_FALSE(opj_seek_from_memory(1, ptr));
|
| + unsigned char buffer[16];
|
| + DecodeData* ptr = nullptr;
|
| +
|
| + // Error codes, not segvs, should callers pass us a NULL pointer.
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), ptr));
|
| + EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), ptr));
|
| + EXPECT_EQ(kSkipError, opj_skip_from_memory(1, ptr));
|
| + EXPECT_FALSE(opj_seek_from_memory(1, ptr));
|
| }
|
|
|
| TEST(fxcodec, DecodeDataNullStream) {
|
| - DecodeData dd(nullptr, 0);
|
| - unsigned char buffer[16];
|
| + DecodeData dd(nullptr, 0);
|
| + unsigned char buffer[16];
|
|
|
| - // Reads of size 0 do nothing but return an error code.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| + // Reads of size 0 do nothing but return an error code.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
|
|
| - // Reads of nonzero size do nothing but return an error code.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| + // Reads of nonzero size do nothing but return an error code.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
|
|
| - // writes of size 0 do nothing but return an error code.
|
| - EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd));
|
| + // writes of size 0 do nothing but return an error code.
|
| + EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd));
|
|
|
| - // writes of nonzero size do nothing but return an error code.
|
| - EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd));
|
| + // writes of nonzero size do nothing but return an error code.
|
| + EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd));
|
|
|
| - // Skips of size 0 always return an error code.
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd));
|
| + // Skips of size 0 always return an error code.
|
| + EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd));
|
|
|
| - // Skips of nonzero size always return an error code.
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd));
|
| + // Skips of nonzero size always return an error code.
|
| + EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd));
|
|
|
| - // Seeks to 0 offset return in error.
|
| - EXPECT_FALSE(opj_seek_from_memory(0, &dd));
|
| + // Seeks to 0 offset return in error.
|
| + EXPECT_FALSE(opj_seek_from_memory(0, &dd));
|
|
|
| - // Seeks to non-zero offsets return in error.
|
| - EXPECT_FALSE(opj_seek_from_memory(1, &dd));
|
| + // Seeks to non-zero offsets return in error.
|
| + EXPECT_FALSE(opj_seek_from_memory(1, &dd));
|
| }
|
|
|
| TEST(fxcodec, DecodeDataZeroSize) {
|
| - DecodeData dd(stream_data, 0);
|
| - unsigned char buffer[16];
|
| + DecodeData dd(stream_data, 0);
|
| + unsigned char buffer[16];
|
|
|
| - // Reads of size 0 do nothing but return an error code.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| + // Reads of size 0 do nothing but return an error code.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
|
|
| - // Reads of nonzero size do nothing but return an error code.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| + // Reads of nonzero size do nothing but return an error code.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
|
|
| - // writes of size 0 do nothing but return an error code.
|
| - EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd));
|
| + // writes of size 0 do nothing but return an error code.
|
| + EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd));
|
|
|
| - // writes of nonzero size do nothing but return an error code.
|
| - EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd));
|
| + // writes of nonzero size do nothing but return an error code.
|
| + EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd));
|
|
|
| - // Skips of size 0 always return an error code.
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd));
|
| + // Skips of size 0 always return an error code.
|
| + EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd));
|
|
|
| - // Skips of nonzero size always return an error code.
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd));
|
| + // Skips of nonzero size always return an error code.
|
| + EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd));
|
|
|
| - // Seeks to 0 offset return in error.
|
| - EXPECT_FALSE(opj_seek_from_memory(0, &dd));
|
| + // Seeks to 0 offset return in error.
|
| + EXPECT_FALSE(opj_seek_from_memory(0, &dd));
|
|
|
| - // Seeks to non-zero offsets return in error.
|
| - EXPECT_FALSE(opj_seek_from_memory(1, &dd));
|
| + // Seeks to non-zero offsets return in error.
|
| + EXPECT_FALSE(opj_seek_from_memory(1, &dd));
|
| }
|
|
|
| TEST(fxcodec, DecodeDataReadInBounds) {
|
| - unsigned char buffer[16];
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Exact sized read in a single call.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer), &dd));
|
| - EXPECT_EQ(0x00, buffer[0]);
|
| - EXPECT_EQ(0x01, buffer[1]);
|
| - EXPECT_EQ(0x02, buffer[2]);
|
| - EXPECT_EQ(0x03, buffer[3]);
|
| - EXPECT_EQ(0x84, buffer[4]);
|
| - EXPECT_EQ(0x85, buffer[5]);
|
| - EXPECT_EQ(0x86, buffer[6]);
|
| - EXPECT_EQ(0x87, buffer[7]);
|
| - EXPECT_EQ(0xbd, buffer[8]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Simple read.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(2u, opj_read_from_memory(buffer, 2, &dd));
|
| - EXPECT_EQ(0x00, buffer[0]);
|
| - EXPECT_EQ(0x01, buffer[1]);
|
| - EXPECT_EQ(0xbd, buffer[2]);
|
| -
|
| - // Read of size 0 doesn't affect things.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(0u, opj_read_from_memory(buffer, 0, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| -
|
| - // Read exactly up to end of data.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(6u, opj_read_from_memory(buffer, 6, &dd));
|
| - EXPECT_EQ(0x02, buffer[0]);
|
| - EXPECT_EQ(0x03, buffer[1]);
|
| - EXPECT_EQ(0x84, buffer[2]);
|
| - EXPECT_EQ(0x85, buffer[3]);
|
| - EXPECT_EQ(0x86, buffer[4]);
|
| - EXPECT_EQ(0x87, buffer[5]);
|
| - EXPECT_EQ(0xbd, buffer[6]);
|
| -
|
| - // Read of size 0 at EOF is still an error.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| - }
|
| + unsigned char buffer[16];
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Exact sized read in a single call.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer), &dd));
|
| + EXPECT_EQ(0x00, buffer[0]);
|
| + EXPECT_EQ(0x01, buffer[1]);
|
| + EXPECT_EQ(0x02, buffer[2]);
|
| + EXPECT_EQ(0x03, buffer[3]);
|
| + EXPECT_EQ(0x84, buffer[4]);
|
| + EXPECT_EQ(0x85, buffer[5]);
|
| + EXPECT_EQ(0x86, buffer[6]);
|
| + EXPECT_EQ(0x87, buffer[7]);
|
| + EXPECT_EQ(0xbd, buffer[8]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Simple read.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(2u, opj_read_from_memory(buffer, 2, &dd));
|
| + EXPECT_EQ(0x00, buffer[0]);
|
| + EXPECT_EQ(0x01, buffer[1]);
|
| + EXPECT_EQ(0xbd, buffer[2]);
|
| +
|
| + // Read of size 0 doesn't affect things.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(0u, opj_read_from_memory(buffer, 0, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
| +
|
| + // Read exactly up to end of data.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(6u, opj_read_from_memory(buffer, 6, &dd));
|
| + EXPECT_EQ(0x02, buffer[0]);
|
| + EXPECT_EQ(0x03, buffer[1]);
|
| + EXPECT_EQ(0x84, buffer[2]);
|
| + EXPECT_EQ(0x85, buffer[3]);
|
| + EXPECT_EQ(0x86, buffer[4]);
|
| + EXPECT_EQ(0x87, buffer[5]);
|
| + EXPECT_EQ(0xbd, buffer[6]);
|
| +
|
| + // Read of size 0 at EOF is still an error.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
| + }
|
| }
|
|
|
| TEST(fxcodec, DecodeDataReadBeyondBounds) {
|
| - unsigned char buffer[16];
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Read beyond bounds in a single step.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer) + 1, &dd));
|
| - EXPECT_EQ(0x00, buffer[0]);
|
| - EXPECT_EQ(0x01, buffer[1]);
|
| - EXPECT_EQ(0x02, buffer[2]);
|
| - EXPECT_EQ(0x03, buffer[3]);
|
| - EXPECT_EQ(0x84, buffer[4]);
|
| - EXPECT_EQ(0x85, buffer[5]);
|
| - EXPECT_EQ(0x86, buffer[6]);
|
| - EXPECT_EQ(0x87, buffer[7]);
|
| - EXPECT_EQ(0xbd, buffer[8]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Read well beyond bounds in a single step.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(8u, opj_read_from_memory(
|
| - buffer, std::numeric_limits<OPJ_SIZE_T>::max(), &dd));
|
| - EXPECT_EQ(0x00, buffer[0]);
|
| - EXPECT_EQ(0x01, buffer[1]);
|
| - EXPECT_EQ(0x02, buffer[2]);
|
| - EXPECT_EQ(0x03, buffer[3]);
|
| - EXPECT_EQ(0x84, buffer[4]);
|
| - EXPECT_EQ(0x85, buffer[5]);
|
| - EXPECT_EQ(0x86, buffer[6]);
|
| - EXPECT_EQ(0x87, buffer[7]);
|
| - EXPECT_EQ(0xbd, buffer[8]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Read of size 6 gets first 6 bytes.
|
| - // rest of buffer intact.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(6u, opj_read_from_memory(buffer, 6, &dd));
|
| - EXPECT_EQ(0x00, buffer[0]);
|
| - EXPECT_EQ(0x01, buffer[1]);
|
| - EXPECT_EQ(0x02, buffer[2]);
|
| - EXPECT_EQ(0x03, buffer[3]);
|
| - EXPECT_EQ(0x84, buffer[4]);
|
| - EXPECT_EQ(0x85, buffer[5]);
|
| - EXPECT_EQ(0xbd, buffer[6]);
|
| -
|
| - // Read of size 6 gets remaining two bytes.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(2u, opj_read_from_memory(buffer, 6, &dd));
|
| - EXPECT_EQ(0x86, buffer[0]);
|
| - EXPECT_EQ(0x87, buffer[1]);
|
| - EXPECT_EQ(0xbd, buffer[2]);
|
| -
|
| - // Read of 6 more gets nothing and leaves rest of buffer intact.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 6, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| - }
|
| + unsigned char buffer[16];
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Read beyond bounds in a single step.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer) + 1, &dd));
|
| + EXPECT_EQ(0x00, buffer[0]);
|
| + EXPECT_EQ(0x01, buffer[1]);
|
| + EXPECT_EQ(0x02, buffer[2]);
|
| + EXPECT_EQ(0x03, buffer[3]);
|
| + EXPECT_EQ(0x84, buffer[4]);
|
| + EXPECT_EQ(0x85, buffer[5]);
|
| + EXPECT_EQ(0x86, buffer[6]);
|
| + EXPECT_EQ(0x87, buffer[7]);
|
| + EXPECT_EQ(0xbd, buffer[8]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Read well beyond bounds in a single step.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(8u, opj_read_from_memory(
|
| + buffer, std::numeric_limits<OPJ_SIZE_T>::max(), &dd));
|
| + EXPECT_EQ(0x00, buffer[0]);
|
| + EXPECT_EQ(0x01, buffer[1]);
|
| + EXPECT_EQ(0x02, buffer[2]);
|
| + EXPECT_EQ(0x03, buffer[3]);
|
| + EXPECT_EQ(0x84, buffer[4]);
|
| + EXPECT_EQ(0x85, buffer[5]);
|
| + EXPECT_EQ(0x86, buffer[6]);
|
| + EXPECT_EQ(0x87, buffer[7]);
|
| + EXPECT_EQ(0xbd, buffer[8]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Read of size 6 gets first 6 bytes.
|
| + // rest of buffer intact.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(6u, opj_read_from_memory(buffer, 6, &dd));
|
| + EXPECT_EQ(0x00, buffer[0]);
|
| + EXPECT_EQ(0x01, buffer[1]);
|
| + EXPECT_EQ(0x02, buffer[2]);
|
| + EXPECT_EQ(0x03, buffer[3]);
|
| + EXPECT_EQ(0x84, buffer[4]);
|
| + EXPECT_EQ(0x85, buffer[5]);
|
| + EXPECT_EQ(0xbd, buffer[6]);
|
| +
|
| + // Read of size 6 gets remaining two bytes.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(2u, opj_read_from_memory(buffer, 6, &dd));
|
| + EXPECT_EQ(0x86, buffer[0]);
|
| + EXPECT_EQ(0x87, buffer[1]);
|
| + EXPECT_EQ(0xbd, buffer[2]);
|
| +
|
| + // Read of 6 more gets nothing and leaves rest of buffer intact.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 6, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
| + }
|
| }
|
|
|
| TEST(fxcodec, DecodeDataWriteInBounds) {
|
| - unsigned char stream[16];
|
| - static unsigned char buffer_data[] = {
|
| - 0x00, 0x01, 0x02, 0x03, 0x80,
|
| - 0x80, 0x81, 0x82, 0x83, 0x84,
|
| - };
|
| - {
|
| - // Pretend the stream can only hold 4 bytes.
|
| - DecodeData dd(stream, 4);
|
| -
|
| - memset(stream, 0xbd, sizeof(stream));
|
| - EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 4, &dd));
|
| - EXPECT_EQ(0x00, stream[0]);
|
| - EXPECT_EQ(0x01, stream[1]);
|
| - EXPECT_EQ(0x02, stream[2]);
|
| - EXPECT_EQ(0x03, stream[3]);
|
| - EXPECT_EQ(0xbd, stream[4]);
|
| - }
|
| - {
|
| - // Pretend the stream can only hold 4 bytes.
|
| - DecodeData dd(stream, 4);
|
| -
|
| - memset(stream, 0xbd, sizeof(stream));
|
| - EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
|
| - EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
|
| - EXPECT_EQ(0x00, stream[0]);
|
| - EXPECT_EQ(0x01, stream[1]);
|
| - EXPECT_EQ(0x00, stream[2]);
|
| - EXPECT_EQ(0x01, stream[3]);
|
| - EXPECT_EQ(0xbd, stream[4]);
|
| - }
|
| + unsigned char stream[16];
|
| + static unsigned char buffer_data[] = {
|
| + 0x00, 0x01, 0x02, 0x03, 0x80, 0x80, 0x81, 0x82, 0x83, 0x84,
|
| + };
|
| + {
|
| + // Pretend the stream can only hold 4 bytes.
|
| + DecodeData dd(stream, 4);
|
| +
|
| + memset(stream, 0xbd, sizeof(stream));
|
| + EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 4, &dd));
|
| + EXPECT_EQ(0x00, stream[0]);
|
| + EXPECT_EQ(0x01, stream[1]);
|
| + EXPECT_EQ(0x02, stream[2]);
|
| + EXPECT_EQ(0x03, stream[3]);
|
| + EXPECT_EQ(0xbd, stream[4]);
|
| + }
|
| + {
|
| + // Pretend the stream can only hold 4 bytes.
|
| + DecodeData dd(stream, 4);
|
| +
|
| + memset(stream, 0xbd, sizeof(stream));
|
| + EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
|
| + EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
|
| + EXPECT_EQ(0x00, stream[0]);
|
| + EXPECT_EQ(0x01, stream[1]);
|
| + EXPECT_EQ(0x00, stream[2]);
|
| + EXPECT_EQ(0x01, stream[3]);
|
| + EXPECT_EQ(0xbd, stream[4]);
|
| + }
|
| }
|
|
|
| TEST(fxcodec, DecodeDataWriteBeyondBounds) {
|
| - unsigned char stream[16];
|
| - static unsigned char buffer_data[] = {
|
| - 0x10, 0x11, 0x12, 0x13,
|
| - 0x94, 0x95, 0x96, 0x97,
|
| - };
|
| - {
|
| - // Pretend the stream can only hold 4 bytes.
|
| - DecodeData dd(stream, 4);
|
| -
|
| - // Write ending past EOF transfers up til EOF.
|
| - memset(stream, 0xbd, sizeof(stream));
|
| - EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 5, &dd));
|
| - EXPECT_EQ(0x10, stream[0]);
|
| - EXPECT_EQ(0x11, stream[1]);
|
| - EXPECT_EQ(0x12, stream[2]);
|
| - EXPECT_EQ(0x13, stream[3]);
|
| - EXPECT_EQ(0xbd, stream[4]);
|
| -
|
| - // Subsequent writes fail.
|
| - memset(stream, 0xbd, sizeof(stream));
|
| - EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd));
|
| - EXPECT_EQ(0xbd, stream[0]);
|
| - }
|
| - {
|
| - // Pretend the stream can only hold 4 bytes.
|
| - DecodeData dd(stream, 4);
|
| -
|
| - // Write ending past EOF (two steps) transfers up til EOF.
|
| - memset(stream, 0xbd, sizeof(stream));
|
| - EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
|
| - EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 4, &dd));
|
| - EXPECT_EQ(0x10, stream[0]);
|
| - EXPECT_EQ(0x11, stream[1]);
|
| - EXPECT_EQ(0x10, stream[2]);
|
| - EXPECT_EQ(0x11, stream[3]);
|
| - EXPECT_EQ(0xbd, stream[4]);
|
| -
|
| - // Subsequent writes fail.
|
| - memset(stream, 0xbd, sizeof(stream));
|
| - EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd));
|
| - EXPECT_EQ(0xbd, stream[0]);
|
| - }
|
| + unsigned char stream[16];
|
| + static unsigned char buffer_data[] = {
|
| + 0x10, 0x11, 0x12, 0x13, 0x94, 0x95, 0x96, 0x97,
|
| + };
|
| + {
|
| + // Pretend the stream can only hold 4 bytes.
|
| + DecodeData dd(stream, 4);
|
| +
|
| + // Write ending past EOF transfers up til EOF.
|
| + memset(stream, 0xbd, sizeof(stream));
|
| + EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 5, &dd));
|
| + EXPECT_EQ(0x10, stream[0]);
|
| + EXPECT_EQ(0x11, stream[1]);
|
| + EXPECT_EQ(0x12, stream[2]);
|
| + EXPECT_EQ(0x13, stream[3]);
|
| + EXPECT_EQ(0xbd, stream[4]);
|
| +
|
| + // Subsequent writes fail.
|
| + memset(stream, 0xbd, sizeof(stream));
|
| + EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd));
|
| + EXPECT_EQ(0xbd, stream[0]);
|
| + }
|
| + {
|
| + // Pretend the stream can only hold 4 bytes.
|
| + DecodeData dd(stream, 4);
|
| +
|
| + // Write ending past EOF (two steps) transfers up til EOF.
|
| + memset(stream, 0xbd, sizeof(stream));
|
| + EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd));
|
| + EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 4, &dd));
|
| + EXPECT_EQ(0x10, stream[0]);
|
| + EXPECT_EQ(0x11, stream[1]);
|
| + EXPECT_EQ(0x10, stream[2]);
|
| + EXPECT_EQ(0x11, stream[3]);
|
| + EXPECT_EQ(0xbd, stream[4]);
|
| +
|
| + // Subsequent writes fail.
|
| + memset(stream, 0xbd, sizeof(stream));
|
| + EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd));
|
| + EXPECT_EQ(0xbd, stream[0]);
|
| + }
|
| }
|
|
|
| // Note: Some care needs to be taken here because the skip/seek functions
|
| // take OPJ_OFF_T's as arguments, which are typically a signed type.
|
| TEST(fxcodec, DecodeDataSkip) {
|
| - unsigned char buffer[16];
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Skiping within buffer is allowed.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(1, opj_skip_from_memory(1, &dd));
|
| - EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0x01, buffer[0]);
|
| - EXPECT_EQ(0xbd, buffer[1]);
|
| -
|
| - // Skiping 0 bytes changes nothing.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(0, opj_skip_from_memory(0, &dd));
|
| - EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0x02, buffer[0]);
|
| - EXPECT_EQ(0xbd, buffer[1]);
|
| -
|
| - // Skiping to EOS-1 is possible.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
|
| - EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0x87, buffer[0]);
|
| - EXPECT_EQ(0xbd, buffer[1]);
|
| -
|
| - // Next read fails.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Skiping directly to EOS is allowed.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(8, opj_skip_from_memory(8, &dd));
|
| -
|
| - // Next read fails.
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Skipping beyond end of stream is allowed and returns full distance.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(9, opj_skip_from_memory(9, &dd));
|
| -
|
| - // Next read fails.
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Skipping way beyond EOS is allowd, doesn't wrap, and returns
|
| - // full distance.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
|
| - EXPECT_EQ(std::numeric_limits<OPJ_OFF_T>::max(), opj_skip_from_memory(
|
| - std::numeric_limits<OPJ_OFF_T>::max(), &dd));
|
| -
|
| - // Next read fails. If it succeeds, it may mean we wrapped.
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Negative skip within buffer not is allowed, position unchanged.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(-2, &dd));
|
| -
|
| - // Next read succeeds as if nothing has happenned.
|
| - EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0x84, buffer[0]);
|
| - EXPECT_EQ(0xbd, buffer[1]);
|
| -
|
| - // Negative skip before buffer is not allowed, position unchanged.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd));
|
| -
|
| - // Next read succeeds as if nothing has happenned.
|
| - EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0x85, buffer[0]);
|
| - EXPECT_EQ(0xbd, buffer[1]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Negative skip way before buffer is not allowed, doesn't wrap
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(
|
| - std::numeric_limits<OPJ_OFF_T>::min(), &dd));
|
| -
|
| - // Next read succeeds. If it fails, it may mean we wrapped.
|
| - EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0x84, buffer[0]);
|
| - EXPECT_EQ(0xbd, buffer[1]);
|
| - }
|
| - {
|
| - DecodeData dd(stream_data, sizeof(stream_data));
|
| -
|
| - // Negative skip after EOS isn't alowed, still EOS.
|
| - memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_EQ(8, opj_skip_from_memory(8, &dd));
|
| - EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd));
|
| -
|
| - // Next read fails.
|
| - EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0xbd, buffer[0]);
|
| - }
|
| -
|
| -}
|
| -
|
| -TEST(fxcodec, DecodeDataSeek) {
|
| - unsigned char buffer[16];
|
| + unsigned char buffer[16];
|
| + {
|
| DecodeData dd(stream_data, sizeof(stream_data));
|
|
|
| - // Seeking within buffer is allowed and read succeeds
|
| + // Skiping within buffer is allowed.
|
| memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_TRUE(opj_seek_from_memory(1, &dd));
|
| + EXPECT_EQ(1, opj_skip_from_memory(1, &dd));
|
| EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| EXPECT_EQ(0x01, buffer[0]);
|
| EXPECT_EQ(0xbd, buffer[1]);
|
|
|
| - // Seeking before start returns error leaving position unchanged.
|
| + // Skiping 0 bytes changes nothing.
|
| memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_FALSE(opj_seek_from_memory(-1, &dd));
|
| - EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0, opj_skip_from_memory(0, &dd));
|
| + EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| EXPECT_EQ(0x02, buffer[0]);
|
| EXPECT_EQ(0xbd, buffer[1]);
|
|
|
| - // Seeking way before start returns error leaving position unchanged.
|
| + // Skiping to EOS-1 is possible.
|
| memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_FALSE(opj_seek_from_memory(
|
| - std::numeric_limits<OPJ_OFF_T>::min(), &dd));
|
| - EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0x03, buffer[0]);
|
| + EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
|
| + EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0x87, buffer[0]);
|
| EXPECT_EQ(0xbd, buffer[1]);
|
|
|
| - // Seeking exactly to EOS is allowed but read fails.
|
| + // Next read fails.
|
| memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_TRUE(opj_seek_from_memory(8, &dd));
|
| EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| EXPECT_EQ(0xbd, buffer[0]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
|
|
| - // Seeking back to zero offset is allowed and read succeeds.
|
| + // Skiping directly to EOS is allowed.
|
| memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_TRUE(opj_seek_from_memory(0, &dd));
|
| - EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| - EXPECT_EQ(0x00, buffer[0]);
|
| - EXPECT_EQ(0xbd, buffer[1]);
|
| + EXPECT_EQ(8, opj_skip_from_memory(8, &dd));
|
| +
|
| + // Next read fails.
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Skipping beyond end of stream is allowed and returns full distance.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(9, opj_skip_from_memory(9, &dd));
|
| +
|
| + // Next read fails.
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
|
|
| - // Seeking beyond end of stream is allowed but read fails.
|
| + // Skipping way beyond EOS is allowd, doesn't wrap, and returns
|
| + // full distance.
|
| memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_TRUE(opj_seek_from_memory(16, &dd));
|
| + EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
|
| + EXPECT_EQ(std::numeric_limits<OPJ_OFF_T>::max(),
|
| + opj_skip_from_memory(std::numeric_limits<OPJ_OFF_T>::max(), &dd));
|
| +
|
| + // Next read fails. If it succeeds, it may mean we wrapped.
|
| EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| EXPECT_EQ(0xbd, buffer[0]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
|
|
| - // Seeking within buffer after seek past EOF restores good state.
|
| + // Negative skip within buffer not is allowed, position unchanged.
|
| memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_TRUE(opj_seek_from_memory(4, &dd));
|
| + EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
|
| + EXPECT_EQ(kSkipError, opj_skip_from_memory(-2, &dd));
|
| +
|
| + // Next read succeeds as if nothing has happenned.
|
| EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| EXPECT_EQ(0x84, buffer[0]);
|
| EXPECT_EQ(0xbd, buffer[1]);
|
|
|
| - // Seeking way beyond EOS is allowed, doesn't wrap, and read fails.
|
| + // Negative skip before buffer is not allowed, position unchanged.
|
| memset(buffer, 0xbd, sizeof(buffer));
|
| - EXPECT_TRUE(opj_seek_from_memory(
|
| - std::numeric_limits<OPJ_OFF_T>::max(), &dd));
|
| + EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd));
|
| +
|
| + // Next read succeeds as if nothing has happenned.
|
| + EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0x85, buffer[0]);
|
| + EXPECT_EQ(0xbd, buffer[1]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Negative skip way before buffer is not allowed, doesn't wrap
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(4, opj_skip_from_memory(4, &dd));
|
| + EXPECT_EQ(kSkipError,
|
| + opj_skip_from_memory(std::numeric_limits<OPJ_OFF_T>::min(), &dd));
|
| +
|
| + // Next read succeeds. If it fails, it may mean we wrapped.
|
| + EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0x84, buffer[0]);
|
| + EXPECT_EQ(0xbd, buffer[1]);
|
| + }
|
| + {
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Negative skip after EOS isn't alowed, still EOS.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_EQ(8, opj_skip_from_memory(8, &dd));
|
| + EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd));
|
| +
|
| + // Next read fails.
|
| EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| EXPECT_EQ(0xbd, buffer[0]);
|
| + }
|
| +}
|
| +
|
| +TEST(fxcodec, DecodeDataSeek) {
|
| + unsigned char buffer[16];
|
| + DecodeData dd(stream_data, sizeof(stream_data));
|
| +
|
| + // Seeking within buffer is allowed and read succeeds
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_TRUE(opj_seek_from_memory(1, &dd));
|
| + EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0x01, buffer[0]);
|
| + EXPECT_EQ(0xbd, buffer[1]);
|
| +
|
| + // Seeking before start returns error leaving position unchanged.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_FALSE(opj_seek_from_memory(-1, &dd));
|
| + EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0x02, buffer[0]);
|
| + EXPECT_EQ(0xbd, buffer[1]);
|
| +
|
| + // Seeking way before start returns error leaving position unchanged.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_FALSE(
|
| + opj_seek_from_memory(std::numeric_limits<OPJ_OFF_T>::min(), &dd));
|
| + EXPECT_EQ(1, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0x03, buffer[0]);
|
| + EXPECT_EQ(0xbd, buffer[1]);
|
| +
|
| + // Seeking exactly to EOS is allowed but read fails.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_TRUE(opj_seek_from_memory(8, &dd));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
| +
|
| + // Seeking back to zero offset is allowed and read succeeds.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_TRUE(opj_seek_from_memory(0, &dd));
|
| + EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0x00, buffer[0]);
|
| + EXPECT_EQ(0xbd, buffer[1]);
|
| +
|
| + // Seeking beyond end of stream is allowed but read fails.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_TRUE(opj_seek_from_memory(16, &dd));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
| +
|
| + // Seeking within buffer after seek past EOF restores good state.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_TRUE(opj_seek_from_memory(4, &dd));
|
| + EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0x84, buffer[0]);
|
| + EXPECT_EQ(0xbd, buffer[1]);
|
| +
|
| + // Seeking way beyond EOS is allowed, doesn't wrap, and read fails.
|
| + memset(buffer, 0xbd, sizeof(buffer));
|
| + EXPECT_TRUE(opj_seek_from_memory(std::numeric_limits<OPJ_OFF_T>::max(), &dd));
|
| + EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd));
|
| + EXPECT_EQ(0xbd, buffer[0]);
|
| }
|
|
|