File tree Expand file tree Collapse file tree 6 files changed +66
-8
lines changed
Expand file tree Collapse file tree 6 files changed +66
-8
lines changed Original file line number Diff line number Diff line change @@ -53,9 +53,16 @@ service::AwaitableResolver Result<learn::Episode>::convert(service::AwaitableSca
5353 return ModifiedResult<learn::Episode>::resolve (std::move (result), std::move (params),
5454 [](learn::Episode value, const ResolverParams&)
5555 {
56+ const auto idx = static_cast <size_t >(value);
57+
58+ if (idx >= s_namesEpisode.size ())
59+ {
60+ throw service::schema_exception { { R"ex( Enum value out of range for Episode)ex" } };
61+ }
62+
5663 response::Value resolvedResult (response::Type::EnumValue);
5764
58- resolvedResult.set <std::string>(std::string { s_namesEpisode[static_cast < size_t >(value) ] });
65+ resolvedResult.set <std::string>(std::string { s_namesEpisode[idx ] });
5966
6067 return resolvedResult;
6168 });
Original file line number Diff line number Diff line change @@ -54,9 +54,16 @@ service::AwaitableResolver Result<today::TaskState>::convert(service::AwaitableS
5454 return ModifiedResult<today::TaskState>::resolve (std::move (result), std::move (params),
5555 [](today::TaskState value, const ResolverParams&)
5656 {
57+ const auto idx = static_cast <size_t >(value);
58+
59+ if (idx >= s_namesTaskState.size ())
60+ {
61+ throw service::schema_exception { { R"ex( Enum value out of range for TaskState)ex" } };
62+ }
63+
5764 response::Value resolvedResult (response::Type::EnumValue);
5865
59- resolvedResult.set <std::string>(std::string { s_namesTaskState[static_cast < size_t >(value) ] });
66+ resolvedResult.set <std::string>(std::string { s_namesTaskState[idx ] });
6067
6168 return resolvedResult;
6269 });
Original file line number Diff line number Diff line change @@ -54,9 +54,16 @@ service::AwaitableResolver Result<today::TaskState>::convert(service::AwaitableS
5454 return ModifiedResult<today::TaskState>::resolve (std::move (result), std::move (params),
5555 [](today::TaskState value, const ResolverParams&)
5656 {
57+ const auto idx = static_cast <size_t >(value);
58+
59+ if (idx >= s_namesTaskState.size ())
60+ {
61+ throw service::schema_exception { { R"ex( Enum value out of range for TaskState)ex" } };
62+ }
63+
5764 response::Value resolvedResult (response::Type::EnumValue);
5865
59- resolvedResult.set <std::string>(std::string { s_namesTaskState[static_cast < size_t >(value) ] });
66+ resolvedResult.set <std::string>(std::string { s_namesTaskState[idx ] });
6067
6168 return resolvedResult;
6269 });
Original file line number Diff line number Diff line change @@ -54,9 +54,16 @@ service::AwaitableResolver Result<validation::DogCommand>::convert(service::Awai
5454 return ModifiedResult<validation::DogCommand>::resolve (std::move (result), std::move (params),
5555 [](validation::DogCommand value, const ResolverParams&)
5656 {
57+ const auto idx = static_cast <size_t >(value);
58+
59+ if (idx >= s_namesDogCommand.size ())
60+ {
61+ throw service::schema_exception { { R"ex( Enum value out of range for DogCommand)ex" } };
62+ }
63+
5764 response::Value resolvedResult (response::Type::EnumValue);
5865
59- resolvedResult.set <std::string>(std::string { s_namesDogCommand[static_cast < size_t >(value) ] });
66+ resolvedResult.set <std::string>(std::string { s_namesDogCommand[idx ] });
6067
6168 return resolvedResult;
6269 });
@@ -110,9 +117,16 @@ service::AwaitableResolver Result<validation::CatCommand>::convert(service::Awai
110117 return ModifiedResult<validation::CatCommand>::resolve (std::move (result), std::move (params),
111118 [](validation::CatCommand value, const ResolverParams&)
112119 {
120+ const auto idx = static_cast <size_t >(value);
121+
122+ if (idx >= s_namesCatCommand.size ())
123+ {
124+ throw service::schema_exception { { R"ex( Enum value out of range for CatCommand)ex" } };
125+ }
126+
113127 response::Value resolvedResult (response::Type::EnumValue);
114128
115- resolvedResult.set <std::string>(std::string { s_namesCatCommand[static_cast < size_t >(value) ] });
129+ resolvedResult.set <std::string>(std::string { s_namesCatCommand[idx ] });
116130
117131 return resolvedResult;
118132 });
Original file line number Diff line number Diff line change @@ -1336,10 +1336,19 @@ service::AwaitableResolver Result<)cpp"
13361336 []()cpp" << _loader.getSchemaNamespace ()
13371337 << R"cpp( ::)cpp" << enumType.cppType << R"cpp( value, const ResolverParams&)
13381338 {
1339+ const auto idx = static_cast<size_t>(value);
1340+
1341+ if (idx >= s_names)cpp"
1342+ << enumType.cppType << R"cpp( .size())
1343+ {
1344+ throw service::schema_exception { { R"ex(Enum value out of range for )cpp"
1345+ << enumType.type << R"cpp( )ex" } };
1346+ }
1347+
13391348 response::Value resolvedResult(response::Type::EnumValue);
13401349
13411350 resolvedResult.set<std::string>(std::string { s_names)cpp"
1342- << enumType.cppType << R"cpp( [static_cast<size_t>(value) ] });
1351+ << enumType.cppType << R"cpp( [idx ] });
13431352
13441353 return resolvedResult;
13451354 });
Original file line number Diff line number Diff line change @@ -48,9 +48,16 @@ service::AwaitableResolver Result<introspection::TypeKind>::convert(service::Awa
4848 return ModifiedResult<introspection::TypeKind>::resolve (std::move (result), std::move (params),
4949 [](introspection::TypeKind value, const ResolverParams&)
5050 {
51+ const auto idx = static_cast <size_t >(value);
52+
53+ if (idx >= s_namesTypeKind.size ())
54+ {
55+ throw service::schema_exception { { R"ex( Enum value out of range for __TypeKind)ex" } };
56+ }
57+
5158 response::Value resolvedResult (response::Type::EnumValue);
5259
53- resolvedResult.set <std::string>(std::string { s_namesTypeKind[static_cast < size_t >(value) ] });
60+ resolvedResult.set <std::string>(std::string { s_namesTypeKind[idx ] });
5461
5562 return resolvedResult;
5663 });
@@ -104,9 +111,16 @@ service::AwaitableResolver Result<introspection::DirectiveLocation>::convert(ser
104111 return ModifiedResult<introspection::DirectiveLocation>::resolve (std::move (result), std::move (params),
105112 [](introspection::DirectiveLocation value, const ResolverParams&)
106113 {
114+ const auto idx = static_cast <size_t >(value);
115+
116+ if (idx >= s_namesDirectiveLocation.size ())
117+ {
118+ throw service::schema_exception { { R"ex( Enum value out of range for __DirectiveLocation)ex" } };
119+ }
120+
107121 response::Value resolvedResult (response::Type::EnumValue);
108122
109- resolvedResult.set <std::string>(std::string { s_namesDirectiveLocation[static_cast < size_t >(value) ] });
123+ resolvedResult.set <std::string>(std::string { s_namesDirectiveLocation[idx ] });
110124
111125 return resolvedResult;
112126 });
You can’t perform that action at this time.
0 commit comments