| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "core/fxcodec/codec/codec_int.h" | 9 #include "core/fxcodec/codec/codec_int.h" |
| 10 #include "testing/fx_string_testhelpers.h" | 10 #include "testing/fx_string_testhelpers.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 static const OPJ_OFF_T kSkipError = static_cast<OPJ_OFF_T>(-1); | 13 static const OPJ_OFF_T kSkipError = static_cast<OPJ_OFF_T>(-1); |
| 14 static const OPJ_SIZE_T kReadError = static_cast<OPJ_SIZE_T>(-1); | 14 static const OPJ_SIZE_T kReadError = static_cast<OPJ_SIZE_T>(-1); |
| 15 static const OPJ_SIZE_T kWriteError = static_cast<OPJ_SIZE_T>(-1); | |
| 16 | 15 |
| 17 static unsigned char stream_data[] = { | 16 static const uint8_t stream_data[] = { |
| 18 0x00, 0x01, 0x02, 0x03, | 17 0x00, 0x01, 0x02, 0x03, |
| 19 0x84, 0x85, 0x86, 0x87, // Include some hi-bytes, too. | 18 0x84, 0x85, 0x86, 0x87, // Include some hi-bytes, too. |
| 20 }; | 19 }; |
| 21 | 20 |
| 22 union Float_t { | 21 union Float_t { |
| 23 Float_t(float num = 0.0f) : f(num) {} | 22 Float_t(float num = 0.0f) : f(num) {} |
| 24 | 23 |
| 25 int32_t i; | 24 int32_t i; |
| 26 FX_FLOAT f; | 25 FX_FLOAT f; |
| 27 }; | 26 }; |
| 28 | 27 |
| 29 TEST(fxcodec, CMYK_Rounding) { | 28 TEST(fxcodec, CMYK_Rounding) { |
| 30 // Testing all floats from 0.0 to 1.0 takes about 35 seconds in release | 29 // Testing all floats from 0.0 to 1.0 takes about 35 seconds in release |
| 31 // builds and much longer in debug builds, so just test the known-dangerous | 30 // builds and much longer in debug builds, so just test the known-dangerous |
| 32 // range. | 31 // range. |
| 33 const FX_FLOAT startValue = 0.001f; | 32 const FX_FLOAT startValue = 0.001f; |
| 34 const FX_FLOAT endValue = 0.003f; | 33 const FX_FLOAT endValue = 0.003f; |
| 35 FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f; | 34 FX_FLOAT R = 0.0f, G = 0.0f, B = 0.0f; |
| 36 // Iterate through floats by incrementing the representation, as discussed in | 35 // Iterate through floats by incrementing the representation, as discussed in |
| 37 // https://randomascii.wordpress.com/2012/01/23/stupid-float-tricks-2/ | 36 // https://randomascii.wordpress.com/2012/01/23/stupid-float-tricks-2/ |
| 38 for (Float_t f = startValue; f.f < endValue; f.i++) { | 37 for (Float_t f = startValue; f.f < endValue; f.i++) { |
| 39 AdobeCMYK_to_sRGB(f.f, f.f, f.f, f.f, R, G, B); | 38 AdobeCMYK_to_sRGB(f.f, f.f, f.f, f.f, R, G, B); |
| 40 } | 39 } |
| 41 // Check various other 'special' numbers. | 40 // Check various other 'special' numbers. |
| 42 AdobeCMYK_to_sRGB(0.0f, 0.25f, 0.5f, 1.0f, R, G, B); | 41 AdobeCMYK_to_sRGB(0.0f, 0.25f, 0.5f, 1.0f, R, G, B); |
| 43 } | 42 } |
| 44 | 43 |
| 45 TEST(fxcodec, DecodeDataNullDecodeData) { | 44 TEST(fxcodec, DecodeDataNullDecodeData) { |
| 46 unsigned char buffer[16]; | 45 uint8_t buffer[16]; |
| 47 DecodeData* ptr = nullptr; | 46 DecodeData* ptr = nullptr; |
| 48 | 47 |
| 49 // Error codes, not segvs, should callers pass us a nullptr pointer. | 48 // Error codes, not segvs, should callers pass us a nullptr pointer. |
| 50 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), ptr)); | 49 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), ptr)); |
| 51 EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), ptr)); | |
| 52 EXPECT_EQ(kSkipError, opj_skip_from_memory(1, ptr)); | 50 EXPECT_EQ(kSkipError, opj_skip_from_memory(1, ptr)); |
| 53 EXPECT_FALSE(opj_seek_from_memory(1, ptr)); | 51 EXPECT_FALSE(opj_seek_from_memory(1, ptr)); |
| 54 } | 52 } |
| 55 | 53 |
| 56 TEST(fxcodec, DecodeDataNullStream) { | 54 TEST(fxcodec, DecodeDataNullStream) { |
| 57 DecodeData dd(nullptr, 0); | 55 DecodeData dd(nullptr, 0); |
| 58 unsigned char buffer[16]; | 56 uint8_t buffer[16]; |
| 59 | 57 |
| 60 // Reads of size 0 do nothing but return an error code. | 58 // Reads of size 0 do nothing but return an error code. |
| 61 memset(buffer, 0xbd, sizeof(buffer)); | 59 memset(buffer, 0xbd, sizeof(buffer)); |
| 62 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd)); | 60 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd)); |
| 63 EXPECT_EQ(0xbd, buffer[0]); | 61 EXPECT_EQ(0xbd, buffer[0]); |
| 64 | 62 |
| 65 // Reads of nonzero size do nothing but return an error code. | 63 // Reads of nonzero size do nothing but return an error code. |
| 66 memset(buffer, 0xbd, sizeof(buffer)); | 64 memset(buffer, 0xbd, sizeof(buffer)); |
| 67 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd)); | 65 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd)); |
| 68 EXPECT_EQ(0xbd, buffer[0]); | 66 EXPECT_EQ(0xbd, buffer[0]); |
| 69 | 67 |
| 70 // writes of size 0 do nothing but return an error code. | |
| 71 EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd)); | |
| 72 | |
| 73 // writes of nonzero size do nothing but return an error code. | |
| 74 EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd)); | |
| 75 | |
| 76 // Skips of size 0 always return an error code. | 68 // Skips of size 0 always return an error code. |
| 77 EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd)); | 69 EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd)); |
| 78 | 70 |
| 79 // Skips of nonzero size always return an error code. | 71 // Skips of nonzero size always return an error code. |
| 80 EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd)); | 72 EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd)); |
| 81 | 73 |
| 82 // Seeks to 0 offset return in error. | 74 // Seeks to 0 offset return in error. |
| 83 EXPECT_FALSE(opj_seek_from_memory(0, &dd)); | 75 EXPECT_FALSE(opj_seek_from_memory(0, &dd)); |
| 84 | 76 |
| 85 // Seeks to non-zero offsets return in error. | 77 // Seeks to non-zero offsets return in error. |
| 86 EXPECT_FALSE(opj_seek_from_memory(1, &dd)); | 78 EXPECT_FALSE(opj_seek_from_memory(1, &dd)); |
| 87 } | 79 } |
| 88 | 80 |
| 89 TEST(fxcodec, DecodeDataZeroSize) { | 81 TEST(fxcodec, DecodeDataZeroSize) { |
| 90 DecodeData dd(stream_data, 0); | 82 DecodeData dd(stream_data, 0); |
| 91 unsigned char buffer[16]; | 83 uint8_t buffer[16]; |
| 92 | 84 |
| 93 // Reads of size 0 do nothing but return an error code. | 85 // Reads of size 0 do nothing but return an error code. |
| 94 memset(buffer, 0xbd, sizeof(buffer)); | 86 memset(buffer, 0xbd, sizeof(buffer)); |
| 95 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd)); | 87 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd)); |
| 96 EXPECT_EQ(0xbd, buffer[0]); | 88 EXPECT_EQ(0xbd, buffer[0]); |
| 97 | 89 |
| 98 // Reads of nonzero size do nothing but return an error code. | 90 // Reads of nonzero size do nothing but return an error code. |
| 99 memset(buffer, 0xbd, sizeof(buffer)); | 91 memset(buffer, 0xbd, sizeof(buffer)); |
| 100 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd)); | 92 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, sizeof(buffer), &dd)); |
| 101 EXPECT_EQ(0xbd, buffer[0]); | 93 EXPECT_EQ(0xbd, buffer[0]); |
| 102 | 94 |
| 103 // writes of size 0 do nothing but return an error code. | |
| 104 EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, 0, &dd)); | |
| 105 | |
| 106 // writes of nonzero size do nothing but return an error code. | |
| 107 EXPECT_EQ(kWriteError, opj_write_from_memory(buffer, sizeof(buffer), &dd)); | |
| 108 | |
| 109 // Skips of size 0 always return an error code. | 95 // Skips of size 0 always return an error code. |
| 110 EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd)); | 96 EXPECT_EQ(kSkipError, opj_skip_from_memory(0, &dd)); |
| 111 | 97 |
| 112 // Skips of nonzero size always return an error code. | 98 // Skips of nonzero size always return an error code. |
| 113 EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd)); | 99 EXPECT_EQ(kSkipError, opj_skip_from_memory(1, &dd)); |
| 114 | 100 |
| 115 // Seeks to 0 offset return in error. | 101 // Seeks to 0 offset return in error. |
| 116 EXPECT_FALSE(opj_seek_from_memory(0, &dd)); | 102 EXPECT_FALSE(opj_seek_from_memory(0, &dd)); |
| 117 | 103 |
| 118 // Seeks to non-zero offsets return in error. | 104 // Seeks to non-zero offsets return in error. |
| 119 EXPECT_FALSE(opj_seek_from_memory(1, &dd)); | 105 EXPECT_FALSE(opj_seek_from_memory(1, &dd)); |
| 120 } | 106 } |
| 121 | 107 |
| 122 TEST(fxcodec, DecodeDataReadInBounds) { | 108 TEST(fxcodec, DecodeDataReadInBounds) { |
| 123 unsigned char buffer[16]; | 109 uint8_t buffer[16]; |
| 124 { | 110 { |
| 125 DecodeData dd(stream_data, sizeof(stream_data)); | 111 DecodeData dd(stream_data, sizeof(stream_data)); |
| 126 | 112 |
| 127 // Exact sized read in a single call. | 113 // Exact sized read in a single call. |
| 128 memset(buffer, 0xbd, sizeof(buffer)); | 114 memset(buffer, 0xbd, sizeof(buffer)); |
| 129 EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer), &dd)); | 115 EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer), &dd)); |
| 130 EXPECT_EQ(0x00, buffer[0]); | 116 EXPECT_EQ(0x00, buffer[0]); |
| 131 EXPECT_EQ(0x01, buffer[1]); | 117 EXPECT_EQ(0x01, buffer[1]); |
| 132 EXPECT_EQ(0x02, buffer[2]); | 118 EXPECT_EQ(0x02, buffer[2]); |
| 133 EXPECT_EQ(0x03, buffer[3]); | 119 EXPECT_EQ(0x03, buffer[3]); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 164 EXPECT_EQ(0xbd, buffer[6]); | 150 EXPECT_EQ(0xbd, buffer[6]); |
| 165 | 151 |
| 166 // Read of size 0 at EOF is still an error. | 152 // Read of size 0 at EOF is still an error. |
| 167 memset(buffer, 0xbd, sizeof(buffer)); | 153 memset(buffer, 0xbd, sizeof(buffer)); |
| 168 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd)); | 154 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 0, &dd)); |
| 169 EXPECT_EQ(0xbd, buffer[0]); | 155 EXPECT_EQ(0xbd, buffer[0]); |
| 170 } | 156 } |
| 171 } | 157 } |
| 172 | 158 |
| 173 TEST(fxcodec, DecodeDataReadBeyondBounds) { | 159 TEST(fxcodec, DecodeDataReadBeyondBounds) { |
| 174 unsigned char buffer[16]; | 160 uint8_t buffer[16]; |
| 175 { | 161 { |
| 176 DecodeData dd(stream_data, sizeof(stream_data)); | 162 DecodeData dd(stream_data, sizeof(stream_data)); |
| 177 | 163 |
| 178 // Read beyond bounds in a single step. | 164 // Read beyond bounds in a single step. |
| 179 memset(buffer, 0xbd, sizeof(buffer)); | 165 memset(buffer, 0xbd, sizeof(buffer)); |
| 180 EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer) + 1, &dd)); | 166 EXPECT_EQ(8u, opj_read_from_memory(buffer, sizeof(buffer) + 1, &dd)); |
| 181 EXPECT_EQ(0x00, buffer[0]); | 167 EXPECT_EQ(0x00, buffer[0]); |
| 182 EXPECT_EQ(0x01, buffer[1]); | 168 EXPECT_EQ(0x01, buffer[1]); |
| 183 EXPECT_EQ(0x02, buffer[2]); | 169 EXPECT_EQ(0x02, buffer[2]); |
| 184 EXPECT_EQ(0x03, buffer[3]); | 170 EXPECT_EQ(0x03, buffer[3]); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 EXPECT_EQ(0x87, buffer[1]); | 213 EXPECT_EQ(0x87, buffer[1]); |
| 228 EXPECT_EQ(0xbd, buffer[2]); | 214 EXPECT_EQ(0xbd, buffer[2]); |
| 229 | 215 |
| 230 // Read of 6 more gets nothing and leaves rest of buffer intact. | 216 // Read of 6 more gets nothing and leaves rest of buffer intact. |
| 231 memset(buffer, 0xbd, sizeof(buffer)); | 217 memset(buffer, 0xbd, sizeof(buffer)); |
| 232 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 6, &dd)); | 218 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 6, &dd)); |
| 233 EXPECT_EQ(0xbd, buffer[0]); | 219 EXPECT_EQ(0xbd, buffer[0]); |
| 234 } | 220 } |
| 235 } | 221 } |
| 236 | 222 |
| 237 TEST(fxcodec, DecodeDataWriteInBounds) { | |
| 238 unsigned char stream[16]; | |
| 239 static unsigned char buffer_data[] = { | |
| 240 0x00, 0x01, 0x02, 0x03, 0x80, 0x80, 0x81, 0x82, 0x83, 0x84, | |
| 241 }; | |
| 242 { | |
| 243 // Pretend the stream can only hold 4 bytes. | |
| 244 DecodeData dd(stream, 4); | |
| 245 | |
| 246 memset(stream, 0xbd, sizeof(stream)); | |
| 247 EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 4, &dd)); | |
| 248 EXPECT_EQ(0x00, stream[0]); | |
| 249 EXPECT_EQ(0x01, stream[1]); | |
| 250 EXPECT_EQ(0x02, stream[2]); | |
| 251 EXPECT_EQ(0x03, stream[3]); | |
| 252 EXPECT_EQ(0xbd, stream[4]); | |
| 253 } | |
| 254 { | |
| 255 // Pretend the stream can only hold 4 bytes. | |
| 256 DecodeData dd(stream, 4); | |
| 257 | |
| 258 memset(stream, 0xbd, sizeof(stream)); | |
| 259 EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd)); | |
| 260 EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd)); | |
| 261 EXPECT_EQ(0x00, stream[0]); | |
| 262 EXPECT_EQ(0x01, stream[1]); | |
| 263 EXPECT_EQ(0x00, stream[2]); | |
| 264 EXPECT_EQ(0x01, stream[3]); | |
| 265 EXPECT_EQ(0xbd, stream[4]); | |
| 266 } | |
| 267 } | |
| 268 | |
| 269 TEST(fxcodec, DecodeDataWriteBeyondBounds) { | |
| 270 unsigned char stream[16]; | |
| 271 static unsigned char buffer_data[] = { | |
| 272 0x10, 0x11, 0x12, 0x13, 0x94, 0x95, 0x96, 0x97, | |
| 273 }; | |
| 274 { | |
| 275 // Pretend the stream can only hold 4 bytes. | |
| 276 DecodeData dd(stream, 4); | |
| 277 | |
| 278 // Write ending past EOF transfers up til EOF. | |
| 279 memset(stream, 0xbd, sizeof(stream)); | |
| 280 EXPECT_EQ(4u, opj_write_from_memory(buffer_data, 5, &dd)); | |
| 281 EXPECT_EQ(0x10, stream[0]); | |
| 282 EXPECT_EQ(0x11, stream[1]); | |
| 283 EXPECT_EQ(0x12, stream[2]); | |
| 284 EXPECT_EQ(0x13, stream[3]); | |
| 285 EXPECT_EQ(0xbd, stream[4]); | |
| 286 | |
| 287 // Subsequent writes fail. | |
| 288 memset(stream, 0xbd, sizeof(stream)); | |
| 289 EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd)); | |
| 290 EXPECT_EQ(0xbd, stream[0]); | |
| 291 } | |
| 292 { | |
| 293 // Pretend the stream can only hold 4 bytes. | |
| 294 DecodeData dd(stream, 4); | |
| 295 | |
| 296 // Write ending past EOF (two steps) transfers up til EOF. | |
| 297 memset(stream, 0xbd, sizeof(stream)); | |
| 298 EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 2, &dd)); | |
| 299 EXPECT_EQ(2u, opj_write_from_memory(buffer_data, 4, &dd)); | |
| 300 EXPECT_EQ(0x10, stream[0]); | |
| 301 EXPECT_EQ(0x11, stream[1]); | |
| 302 EXPECT_EQ(0x10, stream[2]); | |
| 303 EXPECT_EQ(0x11, stream[3]); | |
| 304 EXPECT_EQ(0xbd, stream[4]); | |
| 305 | |
| 306 // Subsequent writes fail. | |
| 307 memset(stream, 0xbd, sizeof(stream)); | |
| 308 EXPECT_EQ(kWriteError, opj_write_from_memory(buffer_data, 5, &dd)); | |
| 309 EXPECT_EQ(0xbd, stream[0]); | |
| 310 } | |
| 311 } | |
| 312 | |
| 313 // Note: Some care needs to be taken here because the skip/seek functions | 223 // Note: Some care needs to be taken here because the skip/seek functions |
| 314 // take OPJ_OFF_T's as arguments, which are typically a signed type. | 224 // take OPJ_OFF_T's as arguments, which are typically a signed type. |
| 315 TEST(fxcodec, DecodeDataSkip) { | 225 TEST(fxcodec, DecodeDataSkip) { |
| 316 unsigned char buffer[16]; | 226 uint8_t buffer[16]; |
| 317 { | 227 { |
| 318 DecodeData dd(stream_data, sizeof(stream_data)); | 228 DecodeData dd(stream_data, sizeof(stream_data)); |
| 319 | 229 |
| 320 // Skiping within buffer is allowed. | 230 // Skiping within buffer is allowed. |
| 321 memset(buffer, 0xbd, sizeof(buffer)); | 231 memset(buffer, 0xbd, sizeof(buffer)); |
| 322 EXPECT_EQ(1u, opj_skip_from_memory(1, &dd)); | 232 EXPECT_EQ(1u, opj_skip_from_memory(1, &dd)); |
| 323 EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd)); | 233 EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd)); |
| 324 EXPECT_EQ(0x01, buffer[0]); | 234 EXPECT_EQ(0x01, buffer[0]); |
| 325 EXPECT_EQ(0xbd, buffer[1]); | 235 EXPECT_EQ(0xbd, buffer[1]); |
| 326 | 236 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 EXPECT_EQ(8u, opj_skip_from_memory(8, &dd)); | 333 EXPECT_EQ(8u, opj_skip_from_memory(8, &dd)); |
| 424 EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd)); | 334 EXPECT_EQ(kSkipError, opj_skip_from_memory(-4, &dd)); |
| 425 | 335 |
| 426 // Next read fails. | 336 // Next read fails. |
| 427 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd)); | 337 EXPECT_EQ(kReadError, opj_read_from_memory(buffer, 1, &dd)); |
| 428 EXPECT_EQ(0xbd, buffer[0]); | 338 EXPECT_EQ(0xbd, buffer[0]); |
| 429 } | 339 } |
| 430 } | 340 } |
| 431 | 341 |
| 432 TEST(fxcodec, DecodeDataSeek) { | 342 TEST(fxcodec, DecodeDataSeek) { |
| 433 unsigned char buffer[16]; | 343 uint8_t buffer[16]; |
| 434 DecodeData dd(stream_data, sizeof(stream_data)); | 344 DecodeData dd(stream_data, sizeof(stream_data)); |
| 435 | 345 |
| 436 // Seeking within buffer is allowed and read succeeds | 346 // Seeking within buffer is allowed and read succeeds |
| 437 memset(buffer, 0xbd, sizeof(buffer)); | 347 memset(buffer, 0xbd, sizeof(buffer)); |
| 438 EXPECT_TRUE(opj_seek_from_memory(1, &dd)); | 348 EXPECT_TRUE(opj_seek_from_memory(1, &dd)); |
| 439 EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd)); | 349 EXPECT_EQ(1u, opj_read_from_memory(buffer, 1, &dd)); |
| 440 EXPECT_EQ(0x01, buffer[0]); | 350 EXPECT_EQ(0x01, buffer[0]); |
| 441 EXPECT_EQ(0xbd, buffer[1]); | 351 EXPECT_EQ(0xbd, buffer[1]); |
| 442 | 352 |
| 443 // Seeking before start returns error leaving position unchanged. | 353 // Seeking before start returns error leaving position unchanged. |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 EXPECT_NE(img.comps[0].h, img.comps[1].h); | 456 EXPECT_NE(img.comps[0].h, img.comps[1].h); |
| 547 EXPECT_NE(img.comps[0].w, img.comps[2].w); | 457 EXPECT_NE(img.comps[0].w, img.comps[2].w); |
| 548 EXPECT_NE(img.comps[0].h, img.comps[2].h); | 458 EXPECT_NE(img.comps[0].h, img.comps[2].h); |
| 549 } | 459 } |
| 550 FX_Free(img.comps[0].data); | 460 FX_Free(img.comps[0].data); |
| 551 FX_Free(img.comps[1].data); | 461 FX_Free(img.comps[1].data); |
| 552 FX_Free(img.comps[2].data); | 462 FX_Free(img.comps[2].data); |
| 553 } | 463 } |
| 554 FX_Free(img.comps); | 464 FX_Free(img.comps); |
| 555 } | 465 } |
| OLD | NEW |