Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fbf5bfc5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix bug in directory depth counting."

parents d5015d1d b92de07b
Loading
Loading
Loading
Loading
+24 −6
Original line number Original line Diff line number Diff line
@@ -168,12 +168,6 @@ TEST_F(UtilsTest, IsValidApkPath_EscapeFail) {
            << badasec1 << " should be rejected as a invalid path";
            << badasec1 << " should be rejected as a invalid path";
}
}


TEST_F(UtilsTest, IsValidApkPath_DoubleSlashFail) {
    const char *badasec2 = TEST_ASEC_DIR "com.example.asec//pkg.apk";
    EXPECT_EQ(-1, validate_apk_path(badasec2))
            << badasec2 << " should be rejected as a invalid path";
}

TEST_F(UtilsTest, IsValidApkPath_SubdirEscapeFail) {
TEST_F(UtilsTest, IsValidApkPath_SubdirEscapeFail) {
    const char *badasec3 = TEST_ASEC_DIR "com.example.asec/../../../pkg.apk";
    const char *badasec3 = TEST_ASEC_DIR "com.example.asec/../../../pkg.apk";
    EXPECT_EQ(-1, validate_apk_path(badasec3))
    EXPECT_EQ(-1, validate_apk_path(badasec3))
@@ -451,5 +445,29 @@ TEST_F(UtilsTest, ValidateSecondaryDexFilesPath) {
        package_name, app_dir_ce_user_10 + "/" + too_long, app_uid_for_user_10, FLAG_STORAGE_CE);
        package_name, app_dir_ce_user_10 + "/" + too_long, app_uid_for_user_10, FLAG_STORAGE_CE);
}
}


TEST_F(UtilsTest, ValidateApkPath) {
    EXPECT_EQ(0, validate_apk_path("/data/app/com.example"));
    EXPECT_EQ(0, validate_apk_path("/data/app/com.example/file"));
    EXPECT_EQ(0, validate_apk_path("/data/app/com.example//file"));
    EXPECT_NE(0, validate_apk_path("/data/app/com.example/dir/"));
    EXPECT_NE(0, validate_apk_path("/data/app/com.example/dir/file"));
    EXPECT_NE(0, validate_apk_path("/data/app/com.example/dir/dir/file"));
    EXPECT_NE(0, validate_apk_path("/data/app/com.example/dir/dir//file"));
    EXPECT_NE(0, validate_apk_path("/data/app/com.example/dir/dir/dir/file"));
    EXPECT_NE(0, validate_apk_path("/data/app/com.example/dir/dir/dir//file"));
}

TEST_F(UtilsTest, ValidateApkPathSubdirs) {
    EXPECT_EQ(0, validate_apk_path_subdirs("/data/app/com.example"));
    EXPECT_EQ(0, validate_apk_path_subdirs("/data/app/com.example/file"));
    EXPECT_EQ(0, validate_apk_path_subdirs("/data/app/com.example//file"));
    EXPECT_EQ(0, validate_apk_path_subdirs("/data/app/com.example/dir/"));
    EXPECT_EQ(0, validate_apk_path_subdirs("/data/app/com.example/dir/file"));
    EXPECT_EQ(0, validate_apk_path_subdirs("/data/app/com.example/dir/dir/file"));
    EXPECT_EQ(0, validate_apk_path_subdirs("/data/app/com.example/dir/dir//file"));
    EXPECT_NE(0, validate_apk_path_subdirs("/data/app/com.example/dir/dir/dir/file"));
    EXPECT_NE(0, validate_apk_path_subdirs("/data/app/com.example/dir/dir/dir//file"));
}

}  // namespace installd
}  // namespace installd
}  // namespace android
}  // namespace android
+5 −2
Original line number Original line Diff line number Diff line
@@ -756,9 +756,12 @@ static int validate_path(const std::string& dir, const std::string& path, int ma
    auto pos = path.find('/', dir.size());
    auto pos = path.find('/', dir.size());
    int count = 0;
    int count = 0;
    while (pos != std::string::npos) {
    while (pos != std::string::npos) {
        pos = path.find('/', pos + 1);
        auto next = path.find('/', pos + 1);
        if (next > pos + 1) {
            count++;
            count++;
        }
        }
        pos = next;
    }


    if (count > maxSubdirs) {
    if (count > maxSubdirs) {
        LOG(ERROR) << "Invalid path depth " << path << " when tested against " << dir;
        LOG(ERROR) << "Invalid path depth " << path << " when tested against " << dir;