summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Stephen Hines <srhines@google.com> 2022-10-04 02:36:07 -0700
committer Stephen Hines <srhines@google.com> 2022-10-04 03:08:39 -0700
commiteb39a511944e20112208ba6feb1d92f15c467999 (patch)
treec0bf8f9f090e6bc87cdf21386a23e6d2f15c8ae2
parent81a53c761a4d0586287301c45f708d828090d191 (diff)
Fix stack-use-after-scope for a `std::string`
`android::util::Utf16ToUtf8()` actually returns a `std::string` due to the actual conversion to Utf8. `ParseResourceNamedType()` operates on a `StringPiece` of `converted` (the `std::string` returned from that call), and stashes it away for later use. Of course, by the time we're using the `StringPiece` in `parsed_type`, `converted` has already gone out of scope and is invalid to access. Bug: http://b/250827883 Test: ./art/test/testrunner/run_build_test_target.py -j80 art-asan Change-Id: Iea71a5cc84b7dfa96e7dcb549435f8394770a4df
-rw-r--r--tools/aapt2/ResourceUtils.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/tools/aapt2/ResourceUtils.cpp b/tools/aapt2/ResourceUtils.cpp
index 945f45b8a337..41c7435b534d 100644
--- a/tools/aapt2/ResourceUtils.cpp
+++ b/tools/aapt2/ResourceUtils.cpp
@@ -43,8 +43,9 @@ namespace ResourceUtils {
static std::optional<ResourceNamedType> ToResourceNamedType(const char16_t* type16,
const char* type, size_t type_len) {
std::optional<ResourceNamedTypeRef> parsed_type;
+ std::string converted;
if (type16) {
- auto converted = android::util::Utf16ToUtf8(StringPiece16(type16, type_len));
+ converted = android::util::Utf16ToUtf8(StringPiece16(type16, type_len));
parsed_type = ParseResourceNamedType(converted);
} else if (type) {
parsed_type = ParseResourceNamedType(StringPiece(type, type_len));