Transcoder: Pass transcoding request parcel by value.
Fixes a HWASAN crash in CtsMediaTranscodingTestCases where
TranscoderWrapper reads the incoming request parcel asynchronously
without taking ownership of the memory.
Fixes: 183222648
Test: atest CtsMediaTranscodingTestCases:MediaTranscodeManagerTest
Change-Id: I27a667c1dfa46572f35a13af08fa9722eafaedbb
diff --git a/media/libmediatranscoding/TranscoderWrapper.cpp b/media/libmediatranscoding/TranscoderWrapper.cpp
index d9c98c6..a063565 100644
--- a/media/libmediatranscoding/TranscoderWrapper.cpp
+++ b/media/libmediatranscoding/TranscoderWrapper.cpp
@@ -22,6 +22,7 @@
#include <media/MediaTranscoder.h>
#include <media/NdkCommon.h>
#include <media/TranscoderWrapper.h>
+#include <media/TranscodingRequest.h>
#include <utils/Log.h>
#include <thread>
@@ -221,9 +222,10 @@
}
void TranscoderWrapper::start(ClientIdType clientId, SessionIdType sessionId,
- const TranscodingRequestParcel& request, uid_t callingUid,
+ const TranscodingRequestParcel& requestParcel, uid_t callingUid,
const std::shared_ptr<ITranscodingClientCallback>& clientCb) {
- queueEvent(Event::Start, clientId, sessionId, [=, &request] {
+ TranscodingRequest request{requestParcel};
+ queueEvent(Event::Start, clientId, sessionId, [=] {
media_status_t err = handleStart(clientId, sessionId, request, callingUid, clientCb);
if (err != AMEDIA_OK) {
cleanup();
@@ -255,9 +257,10 @@
}
void TranscoderWrapper::resume(ClientIdType clientId, SessionIdType sessionId,
- const TranscodingRequestParcel& request, uid_t callingUid,
+ const TranscodingRequestParcel& requestParcel, uid_t callingUid,
const std::shared_ptr<ITranscodingClientCallback>& clientCb) {
- queueEvent(Event::Resume, clientId, sessionId, [=, &request] {
+ TranscodingRequest request{requestParcel};
+ queueEvent(Event::Resume, clientId, sessionId, [=] {
media_status_t err = handleResume(clientId, sessionId, request, callingUid, clientCb);
if (err != AMEDIA_OK) {
cleanup();