From 1fb96d3edb8afe3c9c47b684480dcf371d6db127 Mon Sep 17 00:00:00 2001 From: michascant <89426143+MichaScant@users.noreply.github.com> Date: Wed, 5 Feb 2025 20:37:07 -0500 Subject: [PATCH] made changes to ensure its not allowing everything through --- .../src/routes/indexes/settings.rs | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/crates/meilisearch/src/routes/indexes/settings.rs b/crates/meilisearch/src/routes/indexes/settings.rs index 2dbbabc99..e47208264 100644 --- a/crates/meilisearch/src/routes/indexes/settings.rs +++ b/crates/meilisearch/src/routes/indexes/settings.rs @@ -27,15 +27,24 @@ macro_rules! make_setting_routes { ($({route: $route:literal, update_verb: $update_verb:ident, value_type: $type:ty, err_type: $err_ty:ty, attr: $attr:ident, camelcase_attr: $camelcase_attr:literal, analytics: $analytics:ident},)*) => { #[allow(dead_code)] const _: () = { - #[allow(dead_code)] + // First, verify that all fields in Settings are listed in the macro const fn __verify_settings_exist() { - let _: fn() = || { - let meilisearch_types::settings::Settings { $($attr: _,)* .. }: - meilisearch_types::settings::Settings; + // This pattern match will fail at compile time if any field is missing from the macro + // or if a field exists in the macro but not in Settings + let _: fn(meilisearch_types::settings::Settings) = |s| { + match s { + meilisearch_types::settings::Settings { + $($attr: _,)* + _kind: _, + } => {} + } }; + + // if any field is missing or has the wrong type + let _: fn(meilisearch_types::settings::Settings) = |_| {}; } }; - + $( make_setting_route!($route, $update_verb, $type, $err_ty, $attr, $camelcase_attr, $analytics); )* @@ -56,7 +65,7 @@ macro_rules! make_setting_routes { #[macro_export] macro_rules! make_setting_route { - ($route:literal, $update_verb:ident, $type:ty, $err_ty:ty, $attr:ident, $camelcase_attr:literal, $analytics:ident) => { + ($route:literal, $update_verb:ident, $type:ty, $err_type:ty, $attr:ident, $camelcase_attr:literal, $analytics:ident) => { pub mod $attr { use actix_web::web::Data; use actix_web::{web, HttpRequest, HttpResponse, Resource}; @@ -113,7 +122,7 @@ macro_rules! make_setting_route { Data, >, index_uid: actix_web::web::Path, - body: deserr::actix_web::AwebJson, $err_ty>, + body: deserr::actix_web::AwebJson, $err_type>, req: HttpRequest, opt: web::Data, analytics: web::Data,