From 2a06ae82997f8125d9f262a1ec6cf0a3e22ef307 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 5 Aug 2020 17:38:46 -0700 Subject: [PATCH] Fix AnimationParser remove_prefix test The test fails because TEST_STRING, a char[], is silently converted to a std::string, passed to remove_prefix, then the string is destroyed, but a pointer to the string is returned. Fix it by changing the signature of remove_prefix to use std::string_view to be more robust in handling raw char*. Test: run it Change-Id: I553c066907f09cf330c8b7a4659db5a1fee82cac --- healthd/AnimationParser.cpp | 4 ++-- healthd/AnimationParser.h | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/healthd/AnimationParser.cpp b/healthd/AnimationParser.cpp index fde3b95e0..6b08570d9 100644 --- a/healthd/AnimationParser.cpp +++ b/healthd/AnimationParser.cpp @@ -37,8 +37,8 @@ bool can_ignore_line(const char* str) { return true; } -bool remove_prefix(const std::string& line, const char* prefix, const char** rest) { - const char* str = line.c_str(); +bool remove_prefix(std::string_view line, const char* prefix, const char** rest) { + const char* str = line.data(); int start; char c; diff --git a/healthd/AnimationParser.h b/healthd/AnimationParser.h index bc0084518..f55b5635e 100644 --- a/healthd/AnimationParser.h +++ b/healthd/AnimationParser.h @@ -17,6 +17,8 @@ #ifndef HEALTHD_ANIMATION_PARSER_H #define HEALTHD_ANIMATION_PARSER_H +#include + #include "animation.h" namespace android { @@ -24,7 +26,7 @@ namespace android { bool parse_animation_desc(const std::string& content, animation* anim); bool can_ignore_line(const char* str); -bool remove_prefix(const std::string& str, const char* prefix, const char** rest); +bool remove_prefix(std::string_view str, const char* prefix, const char** rest); bool parse_text_field(const char* in, animation::text_field* field); } // namespace android