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