summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rachel Lee <rnlee@google.com> 2023-03-29 00:22:57 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-03-29 00:22:57 +0000
commit69b03326bcbfb75a9214c321b4ad01a33c69b340 (patch)
tree335e8a7011198b40a850049ddee36c390db04b38
parentbfbd40fbe21a37dc6521e8ebdc74030a7a13fcb1 (diff)
parent6a9b0a9fa82fca085c03835e58aa512573314119 (diff)
Merge "Handle null JNI object in DisplayEventReceiver" into udc-dev
-rw-r--r--core/jni/android_view_DisplayEventReceiver.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp
index 0c3ff6c28ea7..410b44161cf6 100644
--- a/core/jni/android_view_DisplayEventReceiver.cpp
+++ b/core/jni/android_view_DisplayEventReceiver.cpp
@@ -18,19 +18,17 @@
//#define LOG_NDEBUG 0
-#include <nativehelper/JNIHelp.h>
-
-#include <inttypes.h>
-
#include <android_runtime/AndroidRuntime.h>
+#include <android_runtime/Log.h>
#include <gui/DisplayEventDispatcher.h>
+#include <inttypes.h>
+#include <nativehelper/JNIHelp.h>
+#include <nativehelper/ScopedLocalRef.h>
#include <utils/Log.h>
#include <utils/Looper.h>
#include <utils/threads.h>
-#include "android_os_MessageQueue.h"
-
-#include <nativehelper/ScopedLocalRef.h>
+#include "android_os_MessageQueue.h"
#include "core_jni_helpers.h"
namespace android {
@@ -133,6 +131,12 @@ static jobject createJavaVsyncEventData(JNIEnv* env, VsyncEventData vsyncEventDa
gDisplayEventReceiverClassInfo
.frameTimelineClassInfo.clazz,
/*initial element*/ NULL));
+ if (!frameTimelineObjs.get() || env->ExceptionCheck()) {
+ ALOGW("%s: Failed to create FrameTimeline array", __func__);
+ LOGW_EX(env);
+ env->ExceptionClear();
+ return NULL;
+ }
for (int i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) {
VsyncEventData::FrameTimeline frameTimeline = vsyncEventData.frameTimelines[i];
ScopedLocalRef<jobject>
@@ -144,6 +148,12 @@ static jobject createJavaVsyncEventData(JNIEnv* env, VsyncEventData vsyncEventDa
frameTimeline.vsyncId,
frameTimeline.expectedPresentationTime,
frameTimeline.deadlineTimestamp));
+ if (!frameTimelineObj.get() || env->ExceptionCheck()) {
+ ALOGW("%s: Failed to create FrameTimeline object", __func__);
+ LOGW_EX(env);
+ env->ExceptionClear();
+ return NULL;
+ }
env->SetObjectArrayElement(frameTimelineObjs.get(), i, frameTimelineObj.get());
}
return env->NewObject(gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.clazz,