Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(739)

Unified Diff: tests/MatrixTest.cpp

Issue 41253002: Checking structure sizes before reading them from memory to avoid overflowing the buffer's stream. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Removing SkMatrix's writeToMemory, readFromMemory Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tests/MatrixTest.cpp
diff --git a/tests/MatrixTest.cpp b/tests/MatrixTest.cpp
index 07eacb6f444ac414391ba52ced766d4c143d19c3..53a4ac170e0731c7bf1e8b25d9fa38fdf5c0946c 100644
--- a/tests/MatrixTest.cpp
+++ b/tests/MatrixTest.cpp
@@ -10,6 +10,8 @@
#include "SkMatrix.h"
#include "SkMatrixUtils.h"
#include "SkRandom.h"
+#include "SkReader32.h"
+#include "SkWriter32.h"
static bool nearly_equal_scalar(SkScalar a, SkScalar b) {
// Note that we get more compounded error for multiple operations when
@@ -112,19 +114,26 @@ static void test_matrix_recttorect(skiatest::Reporter* reporter) {
static void test_flatten(skiatest::Reporter* reporter, const SkMatrix& m) {
// add 100 in case we have a bug, I don't want to kill my stack in the test
- char buffer[SkMatrix::kMaxFlattenSize + 100];
- uint32_t size1 = m.writeToMemory(NULL);
- uint32_t size2 = m.writeToMemory(buffer);
+ static const uint32_t kBufferSize = SkWriter32::MaxWriteMatrixSize() + 100;
+ char buffer[kBufferSize];
+ SkWriter32 writer(SkWriter32::MaxWriteMatrixSize(), buffer, kBufferSize);
+ uint32_t size1 = writer.writeMatrixSize(m);
+ writer.writeMatrix(m);
+ uint32_t size2 = writer.bytesWritten();
REPORTER_ASSERT(reporter, size1 == size2);
- REPORTER_ASSERT(reporter, size1 <= SkMatrix::kMaxFlattenSize);
+ REPORTER_ASSERT(reporter, size1 <= SkWriter32::MaxWriteMatrixSize());
SkMatrix m2;
- uint32_t size3 = m2.readFromMemory(buffer);
+ SkReader32 reader(buffer, kBufferSize);
+ reader.readMatrix(&m2);
+ uint32_t size3 = reader.offset();
REPORTER_ASSERT(reporter, size1 == size3);
REPORTER_ASSERT(reporter, are_equal(reporter, m, m2));
- char buffer2[SkMatrix::kMaxFlattenSize + 100];
- size3 = m2.writeToMemory(buffer2);
+ char buffer2[kBufferSize];
+ SkWriter32 writer2(SkWriter32::MaxWriteMatrixSize(), buffer2, kBufferSize);
+ writer2.writeMatrix(m2);
+ size3 = writer2.bytesWritten();
REPORTER_ASSERT(reporter, size1 == size3);
REPORTER_ASSERT(reporter, memcmp(buffer, buffer2, size1) == 0);
}
« include/core/SkWriter32.h ('K') | « src/pipe/SkGPipeWrite.cpp ('k') | tests/PathTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698