diff options
author | Richard Uhler <ruhler@google.com> | 2015-02-26 11:08:57 -0800 |
---|---|---|
committer | Richard Uhler <ruhler@google.com> | 2015-02-26 11:08:57 -0800 |
commit | 965fd02721746d4164bc40719cd53eefab37cfb3 (patch) | |
tree | f1140d01dfc9547757fbf5e5b97a9c780a7d7503 | |
parent | 01b7c431ed85e0eae4554f6fc0f79a78bc82f31f (diff) | |
download | art-965fd02721746d4164bc40719cd53eefab37cfb3.tar.gz art-965fd02721746d4164bc40719cd53eefab37cfb3.tar.bz2 art-965fd02721746d4164bc40719cd53eefab37cfb3.zip |
Don't require three-character extensions for dex locations.
Bug: 19437875
Change-Id: Ib62b4c691b04f27c5d499affd5a7fd4d9f0c64f9
-rw-r--r-- | runtime/utils.cc | 12 | ||||
-rw-r--r-- | runtime/utils.h | 3 | ||||
-rw-r--r-- | runtime/utils_test.cc | 2 |
3 files changed, 11 insertions, 6 deletions
diff --git a/runtime/utils.cc b/runtime/utils.cc index 6afc373f9..d09f27a21 100644 --- a/runtime/utils.cc +++ b/runtime/utils.cc @@ -1519,14 +1519,16 @@ std::string GetSystemImageFilename(const char* location, const InstructionSet is std::string DexFilenameToOdexFilename(const std::string& location, const InstructionSet isa) { // location = /foo/bar/baz.jar // odex_location = /foo/bar/<isa>/baz.odex - - CHECK_GE(location.size(), 4U) << location; // must be at least .123 std::string odex_location(location); InsertIsaDirectory(isa, &odex_location); - size_t dot_index = odex_location.size() - 3 - 1; // 3=dex or zip or apk - CHECK_EQ('.', odex_location[dot_index]) << location; + size_t dot_index = odex_location.rfind('.'); + + // The location must have an extension, otherwise it's not clear what we + // should return. + CHECK_NE(dot_index, std::string::npos) << odex_location; + CHECK_EQ(std::string::npos, odex_location.find('/', dot_index)) << odex_location; + odex_location.resize(dot_index + 1); - CHECK_EQ('.', odex_location[odex_location.size()-1]) << location << " " << odex_location; odex_location += "odex"; return odex_location; } diff --git a/runtime/utils.h b/runtime/utils.h index 698d686af..9d04d35e2 100644 --- a/runtime/utils.h +++ b/runtime/utils.h @@ -516,8 +516,9 @@ std::string GetDalvikCacheFilenameOrDie(const char* file_location, // Returns the system location for an image std::string GetSystemImageFilename(const char* location, InstructionSet isa); -// Returns an .odex file name next adjacent to the dex location. +// Returns an .odex file name adjacent to the dex location. // For example, for "/foo/bar/baz.jar", return "/foo/bar/<isa>/baz.odex". +// The dex location must include a directory component and have an extension. // Note: does not support multidex location strings. std::string DexFilenameToOdexFilename(const std::string& location, InstructionSet isa); diff --git a/runtime/utils_test.cc b/runtime/utils_test.cc index a3dd13c66..5465762fd 100644 --- a/runtime/utils_test.cc +++ b/runtime/utils_test.cc @@ -374,6 +374,8 @@ TEST_F(UtilsTest, GetSystemImageFilename) { TEST_F(UtilsTest, DexFilenameToOdexFilename) { EXPECT_STREQ("/foo/bar/arm/baz.odex", DexFilenameToOdexFilename("/foo/bar/baz.jar", kArm).c_str()); + EXPECT_STREQ("/foo/bar/arm/baz.odex", + DexFilenameToOdexFilename("/foo/bar/baz.funnyext", kArm).c_str()); } TEST_F(UtilsTest, ExecSuccess) { |