From 7392175ccd5399f5a45a5b71343c9ec4b4549833 Mon Sep 17 00:00:00 2001 From: Yi Kong Date: Fri, 21 Sep 2018 15:30:45 -0700 Subject: [PATCH] Don't use initializer_list as return type The underlying array may be cleaned up once its lifetime has ended, the initializer_list would become ill-formed. Return as std::vector instead. This fixes "-Wreturn-stack-address" (clang) / "-Winit-list-lifetime" (gcc) warning. Test: mma Bug: 111998531 Change-Id: Ie5bb6bc3d0d7689744fd573c5683b22e6fb6b178 --- keymaster/4.0/support/authorization_set.cpp | 3 +-- .../4.0/support/include/keymasterV4_0/authorization_set.h | 2 +- keymaster/4.0/vts/functional/KeymasterHidlTest.cpp | 3 +-- keymaster/4.0/vts/functional/KeymasterHidlTest.h | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/keymaster/4.0/support/authorization_set.cpp b/keymaster/4.0/support/authorization_set.cpp index bf77420b1a..afbcdac6d7 100644 --- a/keymaster/4.0/support/authorization_set.cpp +++ b/keymaster/4.0/support/authorization_set.cpp @@ -523,8 +523,7 @@ AuthorizationSetBuilder& AuthorizationSetBuilder::BlockMode( return *this; } -AuthorizationSetBuilder& AuthorizationSetBuilder::Digest( - std::initializer_list digests) { +AuthorizationSetBuilder& AuthorizationSetBuilder::Digest(std::vector digests) { for (auto digest : digests) { push_back(TAG_DIGEST, digest); } diff --git a/keymaster/4.0/support/include/keymasterV4_0/authorization_set.h b/keymaster/4.0/support/include/keymasterV4_0/authorization_set.h index 6c7fd35eca..18696829db 100644 --- a/keymaster/4.0/support/include/keymasterV4_0/authorization_set.h +++ b/keymaster/4.0/support/include/keymasterV4_0/authorization_set.h @@ -278,7 +278,7 @@ class AuthorizationSetBuilder : public AuthorizationSet { AuthorizationSetBuilder& GcmModeMacLen(uint32_t macLength); AuthorizationSetBuilder& BlockMode(std::initializer_list blockModes); - AuthorizationSetBuilder& Digest(std::initializer_list digests); + AuthorizationSetBuilder& Digest(std::vector digests); AuthorizationSetBuilder& Padding(std::initializer_list paddings); template diff --git a/keymaster/4.0/vts/functional/KeymasterHidlTest.cpp b/keymaster/4.0/vts/functional/KeymasterHidlTest.cpp index 6ed61daa5e..995ae4f45c 100644 --- a/keymaster/4.0/vts/functional/KeymasterHidlTest.cpp +++ b/keymaster/4.0/vts/functional/KeymasterHidlTest.cpp @@ -672,8 +672,7 @@ std::vector KeymasterHidlTest::InvalidCurves() { return {EcCurve::P_224, EcCurve::P_384, EcCurve::P_521}; } -std::initializer_list KeymasterHidlTest::ValidDigests(bool withNone, bool withMD5) { - std::vector result; +std::vector KeymasterHidlTest::ValidDigests(bool withNone, bool withMD5) { switch (SecLevel()) { case SecurityLevel::TRUSTED_ENVIRONMENT: if (withNone) { diff --git a/keymaster/4.0/vts/functional/KeymasterHidlTest.h b/keymaster/4.0/vts/functional/KeymasterHidlTest.h index 94beb21d4d..4cd6a5b577 100644 --- a/keymaster/4.0/vts/functional/KeymasterHidlTest.h +++ b/keymaster/4.0/vts/functional/KeymasterHidlTest.h @@ -214,7 +214,7 @@ class KeymasterHidlTest : public ::testing::VtsHalHidlTargetTestBase { std::vector ValidCurves(); std::vector InvalidCurves(); - std::initializer_list ValidDigests(bool withNone, bool withMD5); + std::vector ValidDigests(bool withNone, bool withMD5); std::vector InvalidDigests(); HidlBuf key_blob_;