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

Commit 81061238 authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Check incoming array sizes before accessing.

Bug: 220733817
Fixes: 220733817
Test: presubmit
Change-Id: I98972b661fc36906d7d86b366c3f9537dcd17b12
parent c5c891ac
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1766,6 +1766,10 @@ binder::Status InstalldNativeService::getAppSize(const std::optional<std::string
        const std::vector<std::string>& codePaths, std::vector<int64_t>* _aidl_return) {
    ENFORCE_UID(AID_SYSTEM);
    CHECK_ARGUMENT_UUID(uuid);
    if (packageNames.size() != ceDataInodes.size()) {
        return exception(binder::Status::EX_ILLEGAL_ARGUMENT,
                         "packageNames/ceDataInodes size mismatch.");
    }
    for (const auto& packageName : packageNames) {
        CHECK_ARGUMENT_PACKAGE_NAME(packageName);
    }
+13 −0
Original line number Diff line number Diff line
@@ -322,6 +322,19 @@ TEST_F(ServiceTest, GetAppSize) {
        system(removeCommand.c_str());
    }
}
TEST_F(ServiceTest, GetAppSizeWrongSizes) {
    int32_t externalStorageAppId = -1;
    std::vector<int64_t> externalStorageSize;

    std::vector<std::string> codePaths;
    std::vector<std::string> packageNames = {"package1", "package2"};
    std::vector<int64_t> ceDataInodes = {0};

    EXPECT_BINDER_FAIL(service->getAppSize(std::nullopt, packageNames, 0,
                                           InstalldNativeService::FLAG_USE_QUOTA,
                                           externalStorageAppId, ceDataInodes, codePaths,
                                           &externalStorageSize));
}
static bool mkdirs(const std::string& path, mode_t mode) {
    struct stat sb;
    if (stat(path.c_str(), &sb) != -1 && S_ISDIR(sb.st_mode)) {