From f1a3263dbb1cc5a4583379cec01ac2ee12656707 Mon Sep 17 00:00:00 2001 From: Ryan Shepherd Date: Wed, 21 Oct 2026 16:15:16 -0700 Subject: [PATCH] Guard generic parameter stack back() access - add explicit checks before using generic_param_stack.back() when rendering GenericTypeIndex - throw detailed invalid_argument messages for missing generic context and out-of-range generic parameter indexes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 61a69fb9-fb73-4bf5-b557-d60d7f503390 --- cppwinrt/type_writers.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cppwinrt/type_writers.h b/cppwinrt/type_writers.h index df17450f1..5c2eea23c 100644 --- a/cppwinrt/type_writers.h +++ b/cppwinrt/type_writers.h @@ -516,7 +516,18 @@ namespace cppwinrt }, [&](GenericTypeIndex var) { - write(generic_param_stack.back()[var.index]); + if (generic_param_stack.empty()) + { + throw_invalid("Invalid generic type parameter index ", std::to_string(var.index), ": no generic parameter context is active"); + } + + auto const& generic_params = generic_param_stack.back(); + if (var.index >= generic_params.size()) + { + throw_invalid("Invalid generic type parameter index ", std::to_string(var.index), ": only ", std::to_string(generic_params.size()), " generic parameters are available"); + } + + write(generic_params[var.index]); }, [&](auto&& type) {