diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
index f6d3fed..bdd1c6f 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/presubmit/ValidateTestsAbi.java
@@ -68,17 +68,47 @@
         /**
          * This binary only exists in 32-bit.
          */
-        BINARY_EXCEPTIONS.add("testavcdec32");
+        BINARY_EXCEPTIONS.add("testhevc32");
 
         /**
          * This binary only exists in 32-bit.
          */
-        BINARY_EXCEPTIONS.add("testhevcdec32");
+        BINARY_EXCEPTIONS.add("testavc32");
 
         /**
          * This binary only exists in 32-bit.
          */
-        BINARY_EXCEPTIONS.add("testmpeg2dec32");
+        BINARY_EXCEPTIONS.add("testmpeg232");
+
+        /**
+         * This binary only exists in 32-bit.
+         */
+        BINARY_EXCEPTIONS.add("testhevc_mem132");
+
+        /**
+         * This binary only exists in 32-bit.
+         */
+        BINARY_EXCEPTIONS.add("testavc_mem132");
+
+        /**
+         * This binary only exists in 32-bit.
+         */
+        BINARY_EXCEPTIONS.add("testmpeg2_mem132");
+
+        /**
+         * This binary only exists in 32-bit.
+         */
+        BINARY_EXCEPTIONS.add("testhevc_mem232");
+
+        /**
+         * This binary only exists in 32-bit.
+         */
+        BINARY_EXCEPTIONS.add("testavc_mem232");
+
+        /**
+         * This binary only exists in 32-bit.
+         */
+        BINARY_EXCEPTIONS.add("testmpeg2_mem232");
 
         /**
          * This binary only exists in 32-bit.
diff --git a/hostsidetests/securitybulletin/AndroidTest.xml b/hostsidetests/securitybulletin/AndroidTest.xml
index ad2e622..b65d6e0 100644
--- a/hostsidetests/securitybulletin/AndroidTest.xml
+++ b/hostsidetests/securitybulletin/AndroidTest.xml
@@ -196,9 +196,15 @@
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
         <option name="cleanup" value="true" />
 
-        <option name="push" value="testhevcdec32->/data/local/tmp/testhevcdec" />
-        <option name="push" value="testavcdec32->/data/local/tmp/testavcdec" />
-        <option name="push" value="testmpeg2dec32->/data/local/tmp/testmpeg2dec" />
+        <option name="push" value="testhevc32->/data/local/tmp/testhevc" />
+        <option name="push" value="testavc32->/data/local/tmp/testavc" />
+        <option name="push" value="testmpeg232->/data/local/tmp/testmpeg2" />
+        <option name="push" value="testhevc_mem132->/data/local/tmp/testhevc_mem1" />
+        <option name="push" value="testavc_mem132->/data/local/tmp/testavc_mem1" />
+        <option name="push" value="testmpeg2_mem132->/data/local/tmp/testmpeg2_mem1" />
+        <option name="push" value="testhevc_mem232->/data/local/tmp/testhevc_mem2" />
+        <option name="push" value="testavc_mem232->/data/local/tmp/testavc_mem2" />
+        <option name="push" value="testmpeg2_mem232->/data/local/tmp/testmpeg2_mem2" />
 
         <option name="append-bitness" value="false" />
     </target_preparer>
diff --git a/hostsidetests/securitybulletin/securityPatch/avcdec/Android.mk b/hostsidetests/securitybulletin/securityPatch/avcdec/Android.mk
index cc73663..b82da08 100644
--- a/hostsidetests/securitybulletin/securityPatch/avcdec/Android.mk
+++ b/hostsidetests/securitybulletin/securityPatch/avcdec/Android.mk
@@ -1,39 +1,7 @@
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#=========================================================================
-# NOTE: This module uses the libavc's testbench from external folder
-# without creating a copy of the testbench locally. Hence LOCAL_SRC_FILES
-# is pointed to external folder.
-# This module is dependent on external/libavc/test
-#=========================================================================
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE := testavcdec
-LOCAL_SRC_FILES := ../../../../../external/libavc/test/decoder/main.c
-LOCAL_MULTILIB := 32
-LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
-LOCAL_C_INCLUDES := external/libavc/common
-LOCAL_C_INCLUDES += external/libavc/decoder
-LOCAL_SHARED_LIBRARIES := liblog
-LOCAL_SHARED_LIBRARIES += libstagefright_soft_avcdec
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts sts vts
-LOCAL_CTS_TEST_PACKAGE := android.security.cts
-
-LOCAL_ARM_MODE := arm
-LOCAL_CFLAGS += -Wall -Werror
-LOCAL_CFLAGS += -DPROFILE_ENABLE -fPIC -DMD5_DISABLE
-include $(BUILD_CTS_EXECUTABLE)
\ No newline at end of file
+# avcdec testbench
+include $(LOCAL_PATH)/testavc.mk
+include $(LOCAL_PATH)/testavc_mem1.mk
+include $(LOCAL_PATH)/testavc_mem2.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/avcdec/common.mk b/hostsidetests/securitybulletin/securityPatch/avcdec/common.mk
new file mode 100644
index 0000000..20c5c15
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/avcdec/common.mk
@@ -0,0 +1,37 @@
+# Copyright (C) 2018 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#=========================================================================
+# NOTE: This module uses the libavc's testbench from external folder
+# without creating a copy of the testbench locally. Hence LOCAL_SRC_FILES
+# is pointed to external folder.
+# This module is dependent on external/libavc/test
+#=========================================================================
+
+LOCAL_MULTILIB := 32
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_SRC_FILES += ../../../../../external/libavc/test/decoder/main.c
+LOCAL_C_INCLUDES := external/libavc/common
+LOCAL_C_INCLUDES += external/libavc/decoder
+LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_SHARED_LIBRARIES += libstagefright_soft_avcdec
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts sts vts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS += -Wall -Werror
+LOCAL_CFLAGS += -DPROFILE_ENABLE -fPIC -DMD5_DISABLE
+
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/avcdec/testavc.mk b/hostsidetests/securitybulletin/securityPatch/avcdec/testavc.mk
new file mode 100644
index 0000000..d42819f
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/avcdec/testavc.mk
@@ -0,0 +1,5 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testavc
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/avcdec/testavc_mem1.mk b/hostsidetests/securitybulletin/securityPatch/avcdec/testavc_mem1.mk
new file mode 100644
index 0000000..ce10152
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/avcdec/testavc_mem1.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testavc_mem1
+LOCAL_SRC_FILES += ../includes/memutils.c
+LOCAL_CFLAGS += -DCHECK_OVERFLOW
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/avcdec/testavc_mem2.mk b/hostsidetests/securitybulletin/securityPatch/avcdec/testavc_mem2.mk
new file mode 100644
index 0000000..af7c08f
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/avcdec/testavc_mem2.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testavc_mem2
+LOCAL_SRC_FILES += ../includes/memutils.c
+LOCAL_CFLAGS += -DCHECK_UNDERFLOW
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/hevcdec/Android.mk b/hostsidetests/securitybulletin/securityPatch/hevcdec/Android.mk
index 5a3ae63..be07cbf 100644
--- a/hostsidetests/securitybulletin/securityPatch/hevcdec/Android.mk
+++ b/hostsidetests/securitybulletin/securityPatch/hevcdec/Android.mk
@@ -1,41 +1,7 @@
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#=========================================================================
-# NOTE: This module uses the libhevc's testbench from external folder
-# without creating a copy of the testbench locally. Hence LOCAL_SRC_FILES
-# is pointed to external folder.
-# This module is dependent on external/libhevc/test
-#=========================================================================
-
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE := testhevcdec
-LOCAL_SRC_FILES := ../../../../../external/libhevc/test/decoder/main.c
-LOCAL_MULTILIB := 32
-LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
-LOCAL_C_INCLUDES := external/libhevc/common
-LOCAL_C_INCLUDES += external/libhevc/decoder
-LOCAL_SHARED_LIBRARIES := liblog
-LOCAL_SHARED_LIBRARIES += libstagefright_soft_hevcdec
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts sts vts
-LOCAL_CTS_TEST_PACKAGE := android.security.cts
-
-LOCAL_ARM_MODE := arm
-LOCAL_CFLAGS += -Wall -Werror
-LOCAL_CFLAGS += -DPROFILE_ENABLE -fPIC -DMD5_DISABLE
-include $(BUILD_CTS_EXECUTABLE)
\ No newline at end of file
+# hevcdec testbench
+include $(LOCAL_PATH)/testhevc.mk
+include $(LOCAL_PATH)/testhevc_mem1.mk
+include $(LOCAL_PATH)/testhevc_mem2.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/hevcdec/common.mk b/hostsidetests/securitybulletin/securityPatch/hevcdec/common.mk
new file mode 100644
index 0000000..5461d84
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/hevcdec/common.mk
@@ -0,0 +1,37 @@
+# Copyright (C) 2018 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#=========================================================================
+# NOTE: This module uses the libhevc's testbench from external folder
+# without creating a copy of the testbench locally. Hence LOCAL_SRC_FILES
+# is pointed to external folder.
+# This module is dependent on external/libhevc/test
+#=========================================================================
+
+LOCAL_MULTILIB := 32
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_SRC_FILES += ../../../../../external/libhevc/test/decoder/main.c
+LOCAL_C_INCLUDES := external/libhevc/common
+LOCAL_C_INCLUDES += external/libhevc/decoder
+LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_SHARED_LIBRARIES += libstagefright_soft_hevcdec
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts sts vts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS += -Wall -Werror
+LOCAL_CFLAGS += -DPROFILE_ENABLE -fPIC -DMD5_DISABLE
+
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc.mk b/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc.mk
new file mode 100644
index 0000000..5bc3c8b
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc.mk
@@ -0,0 +1,5 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testhevc
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc_mem1.mk b/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc_mem1.mk
new file mode 100644
index 0000000..44b9d7f
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc_mem1.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testhevc_mem1
+LOCAL_SRC_FILES += ../includes/memutils.c
+LOCAL_CFLAGS += -DCHECK_OVERFLOW
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc_mem2.mk b/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc_mem2.mk
new file mode 100644
index 0000000..85197b8
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/hevcdec/testhevc_mem2.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testhevc_mem2
+LOCAL_SRC_FILES += ../includes/memutils.c
+LOCAL_CFLAGS += -DCHECK_UNDERFLOW
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/includes/memutils.c b/hostsidetests/securitybulletin/securityPatch/includes/memutils.c
new file mode 100644
index 0000000..10df3bd
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/includes/memutils.c
@@ -0,0 +1,138 @@
+/**
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#define _GNU_SOURCE
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/mman.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+#include <string.h>
+#include <unistd.h>
+#include <signal.h>
+#include "memutils.h"
+
+void sigsegv_handler(int signum) {
+    size_t page_size = getpagesize();
+    for (int i = 0; i < s_mem_map_index; i++) {
+        if (NULL != s_mem_map[i].start_ptr) {
+            ENABLE_MEM_ACCESS(s_mem_map[i].start_ptr,
+                              (s_mem_map[i].num_pages * page_size));
+        }
+    }
+    (*old_sa.sa_handler)(signum);
+}
+
+void sighandler_init(void) {
+    sigemptyset(&new_sa.sa_mask);
+    new_sa.sa_handler = sigsegv_handler;
+    sigaction(SIGSEGV, &new_sa, &old_sa);
+}
+
+void memutils_init(void) {
+    real_memalign = dlsym(RTLD_NEXT, "memalign");
+    if (NULL == real_memalign) {
+        return;
+    }
+    real_free = dlsym(RTLD_NEXT, "free");
+    if (NULL == real_free) {
+        return;
+    }
+    memset(&s_mem_map, 0, MAX_ENTRIES * sizeof(map_struct_t));
+    sighandler_init();
+    s_memutils_initialized = 1;
+}
+
+void *memalign(size_t alignment, size_t size) {
+    if (s_memutils_initialized == 0) {
+        memutils_init();
+    }
+    char* start_ptr;
+    char* mem_ptr;
+    size_t total_size;
+    size_t aligned_size = size;
+    size_t num_pages;
+    size_t page_size = getpagesize();
+
+    /* User specified alignment is not respected and is overridden by
+     * "new_alignment". This is required to catch OOB read when read offset is
+     * less than user specified alignment. "new_alignment" is derived based on
+     * size_t, and helps to avoid bus errors due to non-aligned memory.
+     * "new_alignment", whenever used, is checked to ensure sizeof(size_t)
+     * has returned proper value                                            */
+    size_t new_alignment = sizeof(size_t);
+
+    if (s_mem_map_index == MAX_ENTRIES) {
+        return real_memalign(alignment, size);
+    }
+
+    if (alignment > page_size) {
+        return real_memalign(alignment, size);
+    }
+
+    if ((0 == page_size) || (0 == alignment) || (0 == size)
+            || (0 == new_alignment)) {
+        return real_memalign(alignment, size);
+    }
+#ifdef CHECK_OVERFLOW
+    if (0 != (size % new_alignment)) {
+        aligned_size = size + (new_alignment - (size % new_alignment));
+    }
+#endif
+
+    if (0 != (aligned_size % page_size)) {
+        num_pages = (aligned_size / page_size) + 2;
+    } else {
+        num_pages = (aligned_size / page_size) + 1;
+    }
+
+    total_size = (num_pages * page_size);
+    start_ptr = (char *) real_memalign(page_size, total_size);
+#ifdef CHECK_OVERFLOW
+    mem_ptr = (char *) start_ptr + ((num_pages - 1) * page_size) - aligned_size;
+    DISABLE_MEM_ACCESS((start_ptr + ((num_pages - 1) * page_size)), page_size);
+#endif
+#ifdef CHECK_UNDERFLOW
+    mem_ptr = (char *) start_ptr + page_size;
+    DISABLE_MEM_ACCESS(start_ptr, page_size);
+#endif
+    s_mem_map[s_mem_map_index].start_ptr = start_ptr;
+    s_mem_map[s_mem_map_index].mem_ptr = mem_ptr;
+    s_mem_map[s_mem_map_index].num_pages = num_pages;
+    s_mem_map_index++;
+    memset(mem_ptr, INITIAL_VAL, size);
+    return mem_ptr;
+}
+
+void free(void *ptr) {
+    if (s_memutils_initialized == 0) {
+        memutils_init();
+    }
+    if (ptr != NULL) {
+        int i = 0;
+        size_t page_size = getpagesize();
+        for (i = 0; i < s_mem_map_index; i++) {
+            if (ptr == s_mem_map[i].mem_ptr) {
+                ENABLE_MEM_ACCESS(s_mem_map[i].start_ptr,
+                                  (s_mem_map[i].num_pages * page_size));
+                real_free(s_mem_map[i].start_ptr);
+                memset(&s_mem_map[i], 0, sizeof(map_struct_t));
+                return;
+            }
+        }
+    }
+    real_free(ptr);
+    return;
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/includes/memutils.h b/hostsidetests/securitybulletin/securityPatch/includes/memutils.h
new file mode 100644
index 0000000..ede8bb1
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/includes/memutils.h
@@ -0,0 +1,39 @@
+/**
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#define MAX_ENTRIES        (1024)
+#define INITIAL_VAL        (0xBE)
+
+#define DISABLE_MEM_ACCESS(mem, size)\
+    mprotect((char *) mem, size, PROT_NONE);
+
+#define ENABLE_MEM_ACCESS(mem, size)\
+    mprotect((char *) mem, size, PROT_READ | PROT_WRITE);
+
+typedef struct _map_struct_t {
+    void *start_ptr;
+    void *mem_ptr;
+    int num_pages;
+} map_struct_t;
+
+static void* (*real_memalign)(size_t, size_t) = NULL;
+static void (*real_free)(void *) = NULL;
+static int s_memutils_initialized = 0;
+static int s_mem_map_index = 0;
+static struct sigaction new_sa, old_sa;
+map_struct_t s_mem_map[MAX_ENTRIES];
+#if (!(defined CHECK_OVERFLOW) && !(defined CHECK_UNDERFLOW))
+    #error "CHECK MACROS NOT DEFINED"
+#endif
diff --git a/hostsidetests/securitybulletin/securityPatch/mpeg2dec/Android.mk b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/Android.mk
index 4a6d6bc..5225675 100644
--- a/hostsidetests/securitybulletin/securityPatch/mpeg2dec/Android.mk
+++ b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/Android.mk
@@ -1,41 +1,7 @@
-# Copyright (C) 2018 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#=========================================================================
-# NOTE: This module uses the libmpeg2's testbench from external folder
-# without creating a copy of the testbench locally. Hence LOCAL_SRC_FILES
-# is pointed to external folder.
-# This module is dependent on external/libmpeg2/test
-#=========================================================================
-
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_MODULE := testmpeg2dec
-LOCAL_SRC_FILES := ../../../../../external/libmpeg2/test/decoder/main.c
-LOCAL_MULTILIB := 32
-LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
-LOCAL_C_INCLUDES := external/libmpeg2/common
-LOCAL_C_INCLUDES += external/libmpeg2/decoder
-LOCAL_SHARED_LIBRARIES := liblog
-LOCAL_SHARED_LIBRARIES += libstagefright_soft_mpeg2dec
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts sts vts
-LOCAL_CTS_TEST_PACKAGE := android.security.cts
-
-LOCAL_ARM_MODE := arm
-LOCAL_CFLAGS += -Wall -Werror
-LOCAL_CFLAGS += -DPROFILE_ENABLE -fPIC -DMD5_DISABLE
-include $(BUILD_CTS_EXECUTABLE)
\ No newline at end of file
+# mpeg2dec testbench
+include $(LOCAL_PATH)/testmpeg2.mk
+include $(LOCAL_PATH)/testmpeg2_mem1.mk
+include $(LOCAL_PATH)/testmpeg2_mem2.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/mpeg2dec/common.mk b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/common.mk
new file mode 100644
index 0000000..b3e75d1
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/common.mk
@@ -0,0 +1,37 @@
+# Copyright (C) 2018 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#=========================================================================
+# NOTE: This module uses the libmpeg2's testbench from external folder
+# without creating a copy of the testbench locally. Hence LOCAL_SRC_FILES
+# is pointed to external folder.
+# This module is dependent on external/libmpeg2/test
+#=========================================================================
+
+LOCAL_MULTILIB := 32
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_SRC_FILES += ../../../../../external/libmpeg2/test/decoder/main.c
+LOCAL_C_INCLUDES := external/libmpeg2/common
+LOCAL_C_INCLUDES += external/libmpeg2/decoder
+LOCAL_SHARED_LIBRARIES := liblog
+LOCAL_SHARED_LIBRARIES += libstagefright_soft_mpeg2dec
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts sts vts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS += -Wall -Werror
+LOCAL_CFLAGS += -DPROFILE_ENABLE -fPIC -DMD5_DISABLE
+
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2.mk b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2.mk
new file mode 100644
index 0000000..6da9415
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2.mk
@@ -0,0 +1,5 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testmpeg2
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2_mem1.mk b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2_mem1.mk
new file mode 100644
index 0000000..a1478f0
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2_mem1.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testmpeg2_mem1
+LOCAL_SRC_FILES += ../includes/memutils.c
+LOCAL_CFLAGS += -DCHECK_OVERFLOW
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2_mem2.mk b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2_mem2.mk
new file mode 100644
index 0000000..44c481b
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/mpeg2dec/testmpeg2_mem2.mk
@@ -0,0 +1,7 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := testmpeg2_mem2
+LOCAL_SRC_FILES += ../includes/memutils.c
+LOCAL_CFLAGS += -DCHECK_UNDERFLOW
+include $(LOCAL_PATH)/common.mk
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/TestMediaCodec.java b/hostsidetests/securitybulletin/src/android/security/cts/TestMediaCodec.java
index 51e3632..acd8644 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/TestMediaCodec.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/TestMediaCodec.java
@@ -27,9 +27,15 @@
     final static int TIMEOUT_SEC = 9 * 60;
     final static String RESOURCE_ROOT = "/";
     final static String TMP_FILE_PATH = "/data/local/tmp/";
-    final static String HEVCDEC_BINARY = "testhevcdec";
-    final static String AVCDEC_BINARY = "testavcdec";
-    final static String MPEG2DEC_BINARY = "testmpeg2dec";
+    final static String HEVCDEC_BINARY = "testhevc";
+    final static String AVCDEC_BINARY = "testavc";
+    final static String MPEG2DEC_BINARY = "testmpeg2";
+    final static String HEVCDEC_MEMOVERFLOW_BINARY = "testhevc_mem1";
+    final static String AVCDEC_MEMOVERFLOW_BINARY = "testavc_mem1";
+    final static String MPEG2DEC_MEMOVERFLOW_BINARY = "testmpeg2_mem1";
+    final static String HEVCDEC_MEMUNDERFLOW_BINARY = "testhevc_mem2";
+    final static String AVCDEC_MEMUNDERFLOW_BINARY = "testavc_mem2";
+    final static String MPEG2DEC_MEMUNDERFLOW_BINARY = "testmpeg2_mem2";
 
     /***********************************************************
     To prevent merge conflicts, add HEVC decoder tests for N
@@ -162,6 +168,144 @@
     }
 
     /**
+    * Calls HEVC decoder memory overflow and underflow tests
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runHevcDecodeMemTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runHevcDecodeMemOverflowTest(inputFiles, arguments, device, errPattern);
+       runHevcDecodeMemUnderflowTest(inputFiles, arguments, device,
+               errPattern);
+   }
+
+   /**
+    * Calls runDecodeTest with HEVC decoder overflow test binary name argument
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runHevcDecodeMemOverflowTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runDecodeTest(HEVCDEC_MEMOVERFLOW_BINARY, inputFiles, arguments, device,
+               errPattern);
+   }
+
+   /**
+    * Calls runDecodeTest with HEVC decoder underflow test binary name argument
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runHevcDecodeMemUnderflowTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runDecodeTest(HEVCDEC_MEMUNDERFLOW_BINARY, inputFiles, arguments, device,
+               errPattern);
+   }
+
+   /**
+    * Calls MPEG2 decoder memory overflow and underflow tests
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runMpeg2DecodeMemTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runMpeg2DecodeMemOverflowTest(inputFiles, arguments, device,
+               errPattern);
+       runMpeg2DecodeMemUnderflowTest(inputFiles, arguments, device,
+               errPattern);
+   }
+
+   /**
+    * Calls runDecodeTest with MPEG2 decoder overflow test binary name argument
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runMpeg2DecodeMemOverflowTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runDecodeTest(MPEG2DEC_MEMOVERFLOW_BINARY, inputFiles, arguments, device,
+               errPattern);
+   }
+
+   /**
+    * Calls runDecodeTest with MPEG2 decoder underflow test binary name argument
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runMpeg2DecodeMemUnderflowTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runDecodeTest(MPEG2DEC_MEMUNDERFLOW_BINARY, inputFiles, arguments, device,
+               errPattern);
+   }
+
+   /**
+    * Calls AVC decoder memory overflow and underflow tests
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runAvcDecodeMemTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runAvcDecodeMemOverflowTest(inputFiles, arguments, device, errPattern);
+       runAvcDecodeMemUnderflowTest(inputFiles, arguments, device, errPattern);
+   }
+
+   /**
+    * Calls runDecodeTest with AVC decoder overflow test binary name argument
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runAvcDecodeMemOverflowTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runDecodeTest(AVCDEC_MEMOVERFLOW_BINARY, inputFiles, arguments, device,
+               errPattern);
+   }
+
+   /**
+    * Calls runDecodeTest with AVC decoder underflow test binary name argument
+    *
+    * @param inputFiles files required as input
+    * @param arguments arguments for running the binary
+    * @param device device to be run on
+    * @param errPattern error patterns to be checked for
+    */
+   public static void runAvcDecodeMemUnderflowTest(String inputFiles[],
+           String arguments, ITestDevice device, String errPattern[])
+           throws Exception {
+       runDecodeTest(AVCDEC_MEMUNDERFLOW_BINARY, inputFiles, arguments, device,
+               errPattern);
+   }
+
+    /**
      * Checks for linker errors
      *
      * @param binaryName name of the decoder binary
@@ -185,9 +329,9 @@
             String logcat) throws Exception {
         String genericCrashPattern[] = {
                 ".*name: " + binaryName + "  >>> " + TMP_FILE_PATH + binaryName
-                        + " <<<.*SIGABRT.*",
+                        + " <<<\n.*SIGABRT.*",
                 ".*name: " + binaryName + "  >>> " + TMP_FILE_PATH + binaryName
-                        + " <<<.*SIGSEGV.*"};
+                        + " <<<\n.*SIGSEGV.*"};
         AdbUtils.checkCrash(genericCrashPattern, logcat);
         if (errPattern != null) {
             AdbUtils.checkCrash(errPattern, logcat);
@@ -230,4 +374,4 @@
             checkCodecCrash(binaryName, errPattern, logcatOut);
         }
     }
-}
\ No newline at end of file
+}
