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

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

Merge "Camera: Validate sizes of data during JpegR metadata generation"

parents 34080f27 ff49bdb6
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -1004,19 +1004,21 @@ void CameraProviderManager::ProviderInfo::DeviceInfo3::getSupportedDurations(
    auto availableDurations = ch.find(tag);
    if (availableDurations.count > 0) {
        // Duration entry contains 4 elements (format, width, height, duration)
        for (size_t i = 0; i < availableDurations.count; i += 4) {
        for (const auto& size : sizes) {
            int64_t width = std::get<0>(size);
            int64_t height = std::get<1>(size);
            for (size_t i = 0; i < availableDurations.count; i += 4) {
                if ((availableDurations.data.i64[i] == format) &&
                        (availableDurations.data.i64[i+1] == width) &&
                        (availableDurations.data.i64[i+2] == height)) {
                    durations->push_back(availableDurations.data.i64[i+3]);
                    break;
                }
            }
        }
    }
}

void CameraProviderManager::ProviderInfo::DeviceInfo3::getSupportedDynamicDepthDurations(
        const std::vector<int64_t>& depthDurations, const std::vector<int64_t>& blobDurations,
        std::vector<int64_t> *dynamicDepthDurations /*out*/) {
@@ -1137,8 +1139,7 @@ status_t CameraProviderManager::ProviderInfo::DeviceInfo3::deriveJpegRTags(bool
        return BAD_VALUE;
    }

    std::vector<std::tuple<size_t, size_t>> supportedP010Sizes, supportedBlobSizes,
            supportedDynamicDepthSizes, internalDepthSizes;
    std::vector<std::tuple<size_t, size_t>> supportedP010Sizes, supportedBlobSizes;
    auto capabilities = c.find(ANDROID_REQUEST_AVAILABLE_CAPABILITIES);
    if (capabilities.count == 0) {
        ALOGE("%s: Supported camera capabilities is empty!", __FUNCTION__);
@@ -1191,9 +1192,11 @@ status_t CameraProviderManager::ProviderInfo::DeviceInfo3::deriveJpegRTags(bool
    getSupportedDurations(c, scalerStallDurationsTag, HAL_PIXEL_FORMAT_BLOB,
            supportedP010Sizes, &blobStallDurations);
    if (blobStallDurations.empty() || blobMinDurations.empty() ||
            (blobMinDurations.size() != blobStallDurations.size())) {
        ALOGE("%s: Unexpected number of available blob durations! %zu vs. %zu",
                __FUNCTION__, blobMinDurations.size(), blobStallDurations.size());
            supportedP010Sizes.size() != blobMinDurations.size() ||
            blobMinDurations.size() != blobStallDurations.size()) {
        ALOGE("%s: Unexpected number of available blob durations! %zu vs. %zu with "
                "supportedP010Sizes size: %zu", __FUNCTION__, blobMinDurations.size(),
                blobStallDurations.size(), supportedP010Sizes.size());
        return BAD_VALUE;
    }