From 4b8e424085cc148f715de5c8a0231b0ebbb6a1cc Mon Sep 17 00:00:00 2001 From: biondizzle Date: Mon, 16 Feb 2026 04:49:10 -0500 Subject: [PATCH] handle parse errors --- dynamodb/expression.odin | 6 +++--- main.odin | 12 ++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/dynamodb/expression.odin b/dynamodb/expression.odin index d4b4d09..df3a870 100644 --- a/dynamodb/expression.odin +++ b/dynamodb/expression.odin @@ -405,13 +405,13 @@ parse_expression_attribute_names :: proc(request_body: []byte) -> Maybe(map[stri parse_expression_attribute_values :: proc(request_body: []byte) -> (map[string]Attribute_Value, bool) { data, parse_err := json.parse(request_body, allocator = context.temp_allocator) if parse_err != nil { - return make(map[string]Attribute_Value), true + return make(map[string]Attribute_Value), false } defer json.destroy_value(data) root, ok := data.(json.Object) if !ok { - return make(map[string]Attribute_Value), true + return make(map[string]Attribute_Value), false } values_val, found := root["ExpressionAttributeValues"] @@ -421,7 +421,7 @@ parse_expression_attribute_values :: proc(request_body: []byte) -> (map[string]A values_obj, values_ok := values_val.(json.Object) if !values_ok { - return make(map[string]Attribute_Value), true + return make(map[string]Attribute_Value), false } result := make(map[string]Attribute_Value) diff --git a/main.odin b/main.odin index da21480..3793e6b 100644 --- a/main.odin +++ b/main.odin @@ -1165,7 +1165,11 @@ handle_query :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP_Request, r } } - attr_values, _ := dynamodb.parse_expression_attribute_values(request.body) + attr_values, vals_ok := dynamodb.parse_expression_attribute_values(request.body) + if !vals_ok { + make_error_response(response, .ValidationException, "Invalid ExpressionAttributeValues") + return + } defer { for k, v in attr_values { delete(k) @@ -1330,7 +1334,11 @@ handle_scan :: proc(engine: ^dynamodb.Storage_Engine, request: ^HTTP_Request, re } } - attr_values, _ := dynamodb.parse_expression_attribute_values(request.body) + attr_values, vals_ok := dynamodb.parse_expression_attribute_values(request.body) + if !vals_ok { + make_error_response(response, .ValidationException, "Invalid ExpressionAttributeValues") + return + } defer { for k, v in attr_values { delete(k)