Check padding with filter size in conv and pooling ops.

Bug: 123895608
Test: NeuralNetworksTest_static
Change-Id: Ic41f237b72fbe381539c0881a685961afd9a5ff7
Merged-In: Ic41f237b72fbe381539c0881a685961afd9a5ff7
(cherry picked from commit e1e30d68adba382ce15ffc3313eb9778b25b6e8f)
diff --git a/common/OperationsUtils.cpp b/common/OperationsUtils.cpp
index e9e1ff2..4b257eb 100644
--- a/common/OperationsUtils.cpp
+++ b/common/OperationsUtils.cpp
@@ -351,6 +351,11 @@
     uint32_t filterHeight = getSizeOfDimension(filter, 1);
     uint32_t batches      = getSizeOfDimension(input, 0);
 
+    NN_RET_CHECK_GT(filterWidth, padding_left);
+    NN_RET_CHECK_GT(filterWidth, padding_right);
+    NN_RET_CHECK_GT(filterHeight, padding_top);
+    NN_RET_CHECK_GT(filterHeight, padding_bottom);
+
     uint32_t outWidth = computeOutSize(width, filterWidth, stride_width, dilation_width_factor,
                                        padding_left, padding_right);
     uint32_t outHeight = computeOutSize(height, filterHeight, stride_height, dilation_height_factor,
@@ -391,6 +396,10 @@
     uint32_t batches      = getSizeOfDimension(input, 0);
 
     NN_OPS_CHECK(depth_multiplier * channels_in == channels_out);
+    NN_RET_CHECK_GT(filterWidth, padding_left);
+    NN_RET_CHECK_GT(filterWidth, padding_right);
+    NN_RET_CHECK_GT(filterHeight, padding_top);
+    NN_RET_CHECK_GT(filterHeight, padding_bottom);
 
     uint32_t outWidth = computeOutSize(width, filterWidth, stride_width, dilation_width_factor,
                                        padding_left, padding_right);
@@ -415,6 +424,11 @@
     uint32_t height       = getSizeOfDimension(input, 1);
     uint32_t channels_out = getSizeOfDimension(input, 3);
 
+    NN_RET_CHECK_GT(filter_width, padding_left);
+    NN_RET_CHECK_GT(filter_width, padding_right);
+    NN_RET_CHECK_GT(filter_height, padding_top);
+    NN_RET_CHECK_GT(filter_height, padding_bottom);
+
     uint32_t outWidth = computeOutSize(width, filter_width, stride_width,
                                        padding_left, padding_right);
     uint32_t outHeight = computeOutSize(height, filter_height, stride_height,
@@ -1024,6 +1038,11 @@
     uint32_t filterHeight = getSizeOfDimension(filter, 1);
     uint32_t batches = getSizeOfDimension(input, 0);
 
+    NN_RET_CHECK_GT(filterWidth, padding_left);
+    NN_RET_CHECK_GT(filterWidth, padding_right);
+    NN_RET_CHECK_GT(filterHeight, padding_top);
+    NN_RET_CHECK_GT(filterHeight, padding_bottom);
+
     uint32_t outWidth =
             computeOutSize(width, filterWidth, stride_width, padding_left, padding_right);
     uint32_t outHeight =
@@ -1066,6 +1085,9 @@
     uint32_t outHeight = computeOutSizeTransposeConv(height, filterHeight, stride_height,
                                                      padding_top, padding_bottom);
 
+    NN_RET_CHECK_GT(outWidth, 0);
+    NN_RET_CHECK_GT(outHeight, 0);
+
     output->type = input.type;
     output->dimensions = {batches, outHeight, outWidth, channels_out};
     return true;