Fix division by zero in hwcomposer
Bug: 79886305
Test: run locally
Change-Id: I4a17cc7230cebdf7db1d78ed5a0ef37db1ecabb1
diff --git a/guest/hals/hwcomposer/legacy/base_composer.cpp b/guest/hals/hwcomposer/legacy/base_composer.cpp
index 8fae703..a0266c5 100644
--- a/guest/hals/hwcomposer/legacy/base_composer.cpp
+++ b/guest/hals/hwcomposer/legacy/base_composer.cpp
@@ -62,6 +62,10 @@
int BaseComposer::PostFrameBufferTarget(buffer_handle_t buffer_handle) {
int fb_index = NextScreenBuffer();
+ if (fb_index < 0) {
+ ALOGE("Could not get the next buffer. Is the screen region large enough?");
+ return -1;
+ }
auto screen_view = ScreenRegionView::GetInstance();
void* frame_buffer = screen_view->GetBuffer(fb_index);
const private_handle_t* p_handle =
@@ -100,8 +104,9 @@
}
int BaseComposer::NextScreenBuffer() {
- last_frame_buffer_ = (last_frame_buffer_ + 1) %
- ScreenRegionView::GetInstance()->number_of_buffers();
+ int num_buffers = ScreenRegionView::GetInstance()->number_of_buffers();
+ last_frame_buffer_ =
+ num_buffers > 0 ? (last_frame_buffer_ + 1) % num_buffers : -1;
return last_frame_buffer_;
}
diff --git a/guest/hals/hwcomposer/legacy/base_composer.h b/guest/hals/hwcomposer/legacy/base_composer.h
index 4d4bd2d..9e8d10c 100644
--- a/guest/hals/hwcomposer/legacy/base_composer.h
+++ b/guest/hals/hwcomposer/legacy/base_composer.h
@@ -48,7 +48,7 @@
const gralloc_module_t* gralloc_module_;
int64_t vsync_base_timestamp_;
int32_t vsync_period_ns_;
- int last_frame_buffer_ = -1; // The first index whill be 0
+ int last_frame_buffer_ = -1; // The first index will be 0
private:
// Returns buffer offset or negative on error.