Reject duplicate document snapshot payloads
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user