Chromium Code Reviews

Unified Diff: unit_test/unit_test.h

Issue 1947783002: If image sizes are greater than 32768, fixed point stepping will overflow an int. This CL changes t… (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: comments updated Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « unit_test/scale_test.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: unit_test/unit_test.h
diff --git a/unit_test/unit_test.h b/unit_test/unit_test.h
index 009ff62abf682218f4ecf7bed49e2d3d4435a87f..ae9c9c20b80bf0b92b62e1a85777e2e43d4a81ce 100644
--- a/unit_test/unit_test.h
+++ b/unit_test/unit_test.h
@@ -28,6 +28,32 @@ static __inline int Abs(int v) {
#define OFFBY 0
+// Scaling uses 16.16 fixed point to step thru the source image, so a
+// maximum size of 32767.999 can be expressed. 32768 is valid because
+// the step is 1 beyond the image but not used.
+// Destination size is mainly constrained by valid scale step not the
+// absolute size, so it may be possible to relax the destination size
+// constraint.
+// Source size is unconstrained for most specialized scalers. e.g.
+// An image of 65536 scaled to half size would be valid. The test
+// could be relaxed for special scale factors.
+// If this test is removed, the scaling function should gracefully
+// fail with a return code. The test could be changed to know that
+// libyuv failed in a controlled way.
+
+static const int kMaxWidth = 32768;
+static const int kMaxHeight = 32768;
+
+static inline bool SizeValid(int src_width, int src_height,
+ int dst_width, int dst_height) {
+ if (src_width > kMaxWidth || src_height > kMaxHeight ||
+ dst_width > kMaxWidth || dst_height > kMaxHeight) {
+ printf("Warning - size too large to test. Skipping\n");
+ return false;
+ }
+ return true;
+}
+
#define align_buffer_page_end(var, size) \
uint8* var; \
uint8* var##_mem; \
« no previous file with comments | « unit_test/scale_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine