Validate shader resource label bounds
This commit is contained in:
@@ -801,6 +801,13 @@ void validates_resource_labels(pp::tests::Harness& h)
|
||||
.debug_name = "brush-quad",
|
||||
})
|
||||
.ok());
|
||||
static constexpr char shader_source[] = "void main() {}";
|
||||
PP_EXPECT(h, validate_shader_program_desc(ShaderProgramDesc {
|
||||
.debug_name = "brush-shader",
|
||||
.vertex = ShaderStageSource { .source = shader_source, .source_size = sizeof(shader_source) - 1U },
|
||||
.fragment = ShaderStageSource { .source = shader_source, .source_size = sizeof(shader_source) - 1U },
|
||||
})
|
||||
.ok());
|
||||
|
||||
const auto null_label = validate_resource_label(nullptr);
|
||||
const auto oversized = validate_resource_label(oversized_label.data());
|
||||
@@ -814,6 +821,16 @@ void validates_resource_labels(pp::tests::Harness& h)
|
||||
.topology = PrimitiveTopology::triangles,
|
||||
.debug_name = oversized_label.data(),
|
||||
});
|
||||
const auto null_shader_label = validate_shader_program_desc(ShaderProgramDesc {
|
||||
.debug_name = nullptr,
|
||||
.vertex = ShaderStageSource { .source = shader_source, .source_size = sizeof(shader_source) - 1U },
|
||||
.fragment = ShaderStageSource { .source = shader_source, .source_size = sizeof(shader_source) - 1U },
|
||||
});
|
||||
const auto oversized_shader_label = validate_shader_program_desc(ShaderProgramDesc {
|
||||
.debug_name = oversized_label.data(),
|
||||
.vertex = ShaderStageSource { .source = shader_source, .source_size = sizeof(shader_source) - 1U },
|
||||
.fragment = ShaderStageSource { .source = shader_source, .source_size = sizeof(shader_source) - 1U },
|
||||
});
|
||||
|
||||
PP_EXPECT(h, !null_label.ok());
|
||||
PP_EXPECT(h, null_label.code == StatusCode::invalid_argument);
|
||||
@@ -823,6 +840,10 @@ void validates_resource_labels(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, null_texture_label.code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !oversized_mesh_label.ok());
|
||||
PP_EXPECT(h, oversized_mesh_label.code == StatusCode::out_of_range);
|
||||
PP_EXPECT(h, !null_shader_label.ok());
|
||||
PP_EXPECT(h, null_shader_label.code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !oversized_shader_label.ok());
|
||||
PP_EXPECT(h, oversized_shader_label.code == StatusCode::out_of_range);
|
||||
}
|
||||
|
||||
void validates_mipmap_generation_contract(pp::tests::Harness& h)
|
||||
@@ -1686,6 +1707,9 @@ void renderer_interfaces_support_backend_neutral_dispatch(pp::tests::Harness& h)
|
||||
void render_devices_create_validated_resources(pp::tests::Harness& h)
|
||||
{
|
||||
static constexpr char shader_source[] = "void main() {}";
|
||||
std::array<char, max_resource_label_bytes + 2U> oversized_label {};
|
||||
oversized_label.fill('s');
|
||||
oversized_label[max_resource_label_bytes + 1U] = '\0';
|
||||
|
||||
RecordingRenderDevice device;
|
||||
const auto texture = device.create_texture(TextureDesc {
|
||||
@@ -1750,6 +1774,11 @@ void render_devices_create_validated_resources(pp::tests::Harness& h)
|
||||
.vertex = ShaderStageSource {},
|
||||
.fragment = ShaderStageSource {},
|
||||
});
|
||||
const auto oversized_shader_label = device.create_shader_program(ShaderProgramDesc {
|
||||
.debug_name = oversized_label.data(),
|
||||
.vertex = ShaderStageSource { .source = shader_source, .source_size = sizeof(shader_source) - 1U },
|
||||
.fragment = ShaderStageSource { .source = shader_source, .source_size = sizeof(shader_source) - 1U },
|
||||
});
|
||||
const auto bad_mesh = device.create_mesh(MeshDesc {});
|
||||
const auto bad_readback = device.create_readback_buffer(0);
|
||||
|
||||
@@ -1759,6 +1788,8 @@ void render_devices_create_validated_resources(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, bad_target.status().code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !bad_shader.ok());
|
||||
PP_EXPECT(h, bad_shader.status().code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !oversized_shader_label.ok());
|
||||
PP_EXPECT(h, oversized_shader_label.status().code == StatusCode::out_of_range);
|
||||
PP_EXPECT(h, !bad_mesh.ok());
|
||||
PP_EXPECT(h, bad_mesh.status().code == StatusCode::invalid_argument);
|
||||
PP_EXPECT(h, !bad_readback.ok());
|
||||
|
||||
Reference in New Issue
Block a user