Reject duplicate document snapshot payloads

This commit is contained in:
2026-06-02 17:45:29 +02:00
parent f6780d183c
commit 53fc5f9a57
4 changed files with 72 additions and 2 deletions

View File

@@ -1,6 +1,7 @@
#include "document/document.h"
#include <algorithm>
#include <array>
#include <cmath>
#include <limits>
#include <string>
@@ -238,11 +239,18 @@ namespace {
std::uint32_t document_height) noexcept
{
for (const auto& frame : frames) {
std::array<bool, cube_face_count> seen_faces {};
for (const auto& pixels : frame.face_pixels) {
const auto pixels_status = validate_face_pixels(pixels, document_width, document_height);
if (!pixels_status.ok()) {
return pixels_status;
}
if (seen_faces[pixels.face_index]) {
return pp::foundation::Status::invalid_argument(
"snapshot contains duplicate face pixel payloads for a cube face");
}
seen_faces[pixels.face_index] = true;
}
}
@@ -366,11 +374,19 @@ pp::foundation::Result<CanvasDocument> CanvasDocument::create_from_snapshot(Docu
document.frames_.push_back(frame_config);
}
std::array<bool, cube_face_count> seen_selection_masks {};
for (const auto& mask : config.selection_masks) {
const auto mask_status = validate_selection_mask(mask, document.width_, document.height_);
if (!mask_status.ok()) {
return pp::foundation::Result<CanvasDocument>::failure(mask_status);
}
if (seen_selection_masks[mask.face_index]) {
return pp::foundation::Result<CanvasDocument>::failure(
pp::foundation::Status::invalid_argument(
"snapshot contains duplicate selection masks for a cube face"));
}
seen_selection_masks[mask.face_index] = true;
document.selection_masks_.push_back(mask);
}