Validate snapshot face payloads

This commit is contained in:
2026-06-02 11:14:41 +02:00
parent bad2670f87
commit 7b14c356db
6 changed files with 128 additions and 14 deletions

View File

@@ -232,6 +232,23 @@ namespace {
return pp::foundation::Status::success();
}
[[nodiscard]] pp::foundation::Status validate_frame_face_pixels(
std::span<const AnimationFrame> frames,
std::uint32_t document_width,
std::uint32_t document_height) noexcept
{
for (const auto& frame : frames) {
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;
}
}
}
return pp::foundation::Status::success();
}
}
pp::foundation::Result<CanvasDocument> CanvasDocument::create(DocumentConfig config)
@@ -308,6 +325,11 @@ pp::foundation::Result<CanvasDocument> CanvasDocument::create_from_snapshot(Docu
pp::foundation::Status::out_of_range("document layer frame count exceeds the configured limit"));
}
const auto face_pixels_status = validate_frame_face_pixels(layer_frames, config.width, config.height);
if (!face_pixels_status.ok()) {
return pp::foundation::Result<CanvasDocument>::failure(face_pixels_status);
}
for (const auto& frame_config : layer_frames) {
const auto duration_status = validate_frame_duration(frame_config.duration_ms);
if (!duration_status.ok()) {
@@ -333,6 +355,14 @@ pp::foundation::Result<CanvasDocument> CanvasDocument::create_from_snapshot(Docu
return pp::foundation::Result<CanvasDocument>::failure(duration_status);
}
const auto face_pixels_status = validate_frame_face_pixels(
std::span<const AnimationFrame>(&frame_config, 1),
config.width,
config.height);
if (!face_pixels_status.ok()) {
return pp::foundation::Result<CanvasDocument>::failure(face_pixels_status);
}
document.frames_.push_back(frame_config);
}