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

Commit 203fcaea authored by Akash Malik's avatar Akash Malik Committed by Android (Google) Code Review
Browse files

Merge "Harden remapCameraApi() API" into main

parents f3275468 0894f5b1
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -35,16 +35,16 @@ parcelable CameraIdRemapping {
         * Ordered list of Camera Ids to replace. Only Camera Ids present in this list will be
         * affected.
         */
        @utf8InCpp String[] cameraIdToReplace;
        @utf8InCpp List<String> cameraIdsToReplace;
        /**
         *  Ordered list of updated Camera Ids, where updatedCameraId[i] corresponds to
         *  the updated camera id for cameraIdToReplace[i].
         *  Ordered list of updated Camera Ids, where updatedCameraIds[i] corresponds to
         *  the updated camera id for cameraIdsToReplace[i].
         */
        @utf8InCpp String[] updatedCameraId;
        @utf8InCpp List<String> updatedCameraIds;
    }

    /**
     * List of Camera Id remappings to perform.
     */
    List<PackageIdRemapping> packageIdRemapping;
    List<PackageIdRemapping> packageIdRemappings;
}
+21 −10
Original line number Diff line number Diff line
@@ -833,7 +833,7 @@ Status CameraService::remapCameraIds(const hardware::CameraIdRemapping& cameraId
                "Permission Denial: no permission to configure camera id mapping");
    }
    TCameraIdRemapping cameraIdRemappingMap{};
    binder::Status parseStatus = parseCameraIdRemapping(cameraIdRemapping, cameraIdRemappingMap);
    binder::Status parseStatus = parseCameraIdRemapping(cameraIdRemapping, &cameraIdRemappingMap);
    if (!parseStatus.isOk()) {
        return parseStatus;
    }
@@ -843,25 +843,36 @@ Status CameraService::remapCameraIds(const hardware::CameraIdRemapping& cameraId

Status CameraService::parseCameraIdRemapping(
        const hardware::CameraIdRemapping& cameraIdRemapping,
        TCameraIdRemapping cameraIdRemappingMap) {
        /* out */ TCameraIdRemapping* cameraIdRemappingMap) {
    std::string packageName;
    std::string cameraIdToReplace, updatedCameraId;
    for(const auto& packageIdRemapping: cameraIdRemapping.packageIdRemapping) {
    for(const auto& packageIdRemapping: cameraIdRemapping.packageIdRemappings) {
        packageName = packageIdRemapping.packageName;
        if (packageName == "") {
        if (packageName.empty()) {
            return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT,
                    "CameraIdRemapping: Package name cannot be empty");
        }
        if (packageIdRemapping.cameraIdToReplace.size()
            != packageIdRemapping.updatedCameraId.size()) {
        if (packageIdRemapping.cameraIdsToReplace.size()
            != packageIdRemapping.updatedCameraIds.size()) {
            return STATUS_ERROR_FMT(ERROR_ILLEGAL_ARGUMENT,
                    "CameraIdRemapping: Mismatch in CameraId Remapping lists sizes for package %s",
                    packageName.c_str());
        }
        for(size_t i = 0; i < packageIdRemapping.cameraIdToReplace.size(); i++) {
            cameraIdToReplace = std::string(packageIdRemapping.cameraIdToReplace[i]);
            updatedCameraId = std::string(packageIdRemapping.updatedCameraId[i]);
            cameraIdRemappingMap[packageName][cameraIdToReplace] = updatedCameraId;
        for(size_t i = 0; i < packageIdRemapping.cameraIdsToReplace.size(); i++) {
            cameraIdToReplace = packageIdRemapping.cameraIdsToReplace[i];
            updatedCameraId = packageIdRemapping.updatedCameraIds[i];
            if (cameraIdToReplace.empty() || updatedCameraId.empty()) {
                return STATUS_ERROR_FMT(ERROR_ILLEGAL_ARGUMENT,
                        "CameraIdRemapping: Camera Id cannot be empty for package %s",
                        packageName.c_str());
            }
            if (cameraIdToReplace == updatedCameraId) {
                return STATUS_ERROR_FMT(ERROR_ILLEGAL_ARGUMENT,
                        "CameraIdRemapping: CameraIdToReplace cannot be the same"
                        " as updatedCameraId for %s",
                        packageName.c_str());
            }
            (*cameraIdRemappingMap)[packageName][cameraIdToReplace] = updatedCameraId;
        }
    }
    return Status::ok();
+2 −2
Original line number Diff line number Diff line
@@ -989,7 +989,7 @@ private:
    /** Parses cameraIdRemapping parcelable into the native cameraIdRemappingMap. */
    binder::Status parseCameraIdRemapping(
            const hardware::CameraIdRemapping& cameraIdRemapping,
        TCameraIdRemapping cameraIdRemappingMap);
            /* out */ TCameraIdRemapping* cameraIdRemappingMap);

    /**
     * Resolve the (potentially remapped) camera Id to use for packageName.