blob: 00811e21e42642406254b557d947a3e60aaacbe7 [file] [log] [blame]
{# TODO(vardhan): Fill out the remaining validation error strings. #}
{%- macro validate_not_null_ptr(field_expr, field, object_name, err_string) %}
if (!{{field_expr}}->offset) {
MOJO_INTERNAL_DEBUG_SET_ERROR_MSG({{err_string}})
<< "null field '{{field.name}}' in '{{object_name}}'";
return mojo::internal::ValidationError::UNEXPECTED_NULL_POINTER;
}
{%- endmacro %}
{%- macro validate_encoded_ptr(field_expr, err_string) %}
if (!mojo::internal::ValidateEncodedPointer(&{{field_expr}}->offset)) {
MOJO_INTERNAL_DEBUG_SET_ERROR_MSG({{err_string}}) << "";
return mojo::internal::ValidationError::ILLEGAL_POINTER;
}
{%- endmacro %}
{%- macro validate_array_or_string(field_expr, field, err_string) -%}
const mojo::internal::ArrayValidateParams {{field.name}}_validate_params(
{{field.kind|get_array_validate_params_ctor_args|indent(4)}});
auto validate_retval = {{field.kind|cpp_wrapper_type}}::Data_::Validate(
mojo::internal::DecodePointerRaw(&{{field_expr}}->offset),
bounds_checker, &{{field.name}}_validate_params,
{{err_string}});
if (validate_retval != mojo::internal::ValidationError::NONE) {
return validate_retval;
}
{%- endmacro %}
{%- macro validate_handle(field_expr, field, object_name, err_string) -%}
const mojo::Handle {{field.name}}_handle(object->data.f_{{field.name}});
{%- if not field.kind|is_nullable_kind %}
if ({{field.name}}_handle.value() == mojo::internal::kEncodedInvalidHandleValue) {
MOJO_INTERNAL_DEBUG_SET_ERROR_MSG({{err_string}})
<< "invalid {{field.name}} field in {{object_name}}";
return mojo::internal::ValidationError::UNEXPECTED_INVALID_HANDLE;
}
{%- endif %}
if (!bounds_checker->ClaimHandle({{field.name}}_handle)) {
MOJO_INTERNAL_DEBUG_SET_ERROR_MSG({{err_string}}) << "";
return mojo::internal::ValidationError::ILLEGAL_HANDLE;
}
{%- endmacro -%}
{%- macro validate_union_field(field, union, err_string) %}
{%- set field_expr = "(reinterpret_cast<const "
~ field.kind|cpp_union_field_type
~ "*>(&object->data.f_"
~ field.name
~ "))" -%}
{%- if field.kind|is_object_kind -%}
{%- if not field.kind|is_nullable_kind -%}
{{ validate_not_null_ptr(field_expr, field, union.name, err_string) }}
{%- endif %}
{{ validate_encoded_ptr(field_expr, err_string) }}
{%- endif %}
{%- if field.kind|is_array_kind or field.kind|is_string_kind -%}
{{ validate_array_or_string(field_expr, field, err_string) }}
{%- endif %}
{%- if field.kind|is_any_handle_kind -%}
{{ validate_handle(field_expr, field, union.name, err_string) }}
{%- endif %}
return mojo::internal::ValidationError::NONE;
{%- endmacro %}