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

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

Merge "Harden remapCameraApi() API" into udc-qpr-dev

parents 31a428aa 214f6e62
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.
         */
        String[] cameraIdToReplace;
        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].
         */
        String[] updatedCameraId;
        List<String> updatedCameraIds;
    }

    /**
     * List of Camera Id remappings to perform.
     */
    List<PackageIdRemapping> packageIdRemapping;
    List<PackageIdRemapping> packageIdRemappings;
}
+21 −9
Original line number Diff line number Diff line
@@ -766,7 +766,7 @@ Status CameraService::remapCameraIds(const hardware::CameraIdRemapping&
                "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;
    }
@@ -776,25 +776,37 @@ Status CameraService::remapCameraIds(const hardware::CameraIdRemapping&

Status CameraService::parseCameraIdRemapping(
        const hardware::CameraIdRemapping& cameraIdRemapping,
        TCameraIdRemapping cameraIdRemappingMap) {
        /* out */ TCameraIdRemapping* cameraIdRemappingMap) {
    String16 packageName;
    String8 cameraIdToReplace, updatedCameraId;
    for(const auto& packageIdRemapping: cameraIdRemapping.packageIdRemapping) {
    for(const auto& packageIdRemapping: cameraIdRemapping.packageIdRemappings) {
        packageName = packageIdRemapping.packageName;
        if (packageName == String16("")) {
            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",
                     String8(packageName).c_str());
        }
        for(size_t i = 0; i < packageIdRemapping.cameraIdToReplace.size(); i++) {
            cameraIdToReplace = String8(packageIdRemapping.cameraIdToReplace[i]);
            updatedCameraId = String8(packageIdRemapping.updatedCameraId[i]);
            cameraIdRemappingMap[packageName][cameraIdToReplace] = updatedCameraId;
        for(size_t i = 0; i < packageIdRemapping.cameraIdsToReplace.size(); i++) {
            cameraIdToReplace = String8(packageIdRemapping.cameraIdsToReplace[i]);
            updatedCameraId = String8(packageIdRemapping.updatedCameraIds[i]);
            if (cameraIdToReplace == String8("") || updatedCameraId == String8("")) {
                return STATUS_ERROR_FMT(ERROR_ILLEGAL_ARGUMENT,
                        "CameraIdRemapping: Camera Id cannot be empty for package %s",
                        String8(packageName).c_str());
            }
            if (cameraIdToReplace == updatedCameraId) {
                return STATUS_ERROR_FMT(ERROR_ILLEGAL_ARGUMENT,
                        "CameraIdRemapping: CameraIdToReplace cannot be the same"
                        " as updatedCameraId for %s",
                        String8(packageName).c_str());
            }
            (*cameraIdRemappingMap)[packageName][cameraIdToReplace] = updatedCameraId;
        }
    }
    return Status::ok();
+2 −2
Original line number Diff line number Diff line
@@ -965,7 +965,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.