Merge pull request #2327 from ReinUsesLisp/crash-safe-visit
gl_shader_decompiler: Return early when an operation is invalid
This commit is contained in:
commit
520e4e5d4b
|
@ -426,9 +426,14 @@ private:
|
||||||
std::string Visit(Node node) {
|
std::string Visit(Node node) {
|
||||||
if (const auto operation = std::get_if<OperationNode>(node)) {
|
if (const auto operation = std::get_if<OperationNode>(node)) {
|
||||||
const auto operation_index = static_cast<std::size_t>(operation->GetCode());
|
const auto operation_index = static_cast<std::size_t>(operation->GetCode());
|
||||||
|
if (operation_index >= operation_decompilers.size()) {
|
||||||
|
UNREACHABLE_MSG("Out of bounds operation: {}", operation_index);
|
||||||
|
return {};
|
||||||
|
}
|
||||||
const auto decompiler = operation_decompilers[operation_index];
|
const auto decompiler = operation_decompilers[operation_index];
|
||||||
if (decompiler == nullptr) {
|
if (decompiler == nullptr) {
|
||||||
UNREACHABLE_MSG("Operation decompiler {} not defined", operation_index);
|
UNREACHABLE_MSG("Undefined operation: {}", operation_index);
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
return (this->*decompiler)(*operation);
|
return (this->*decompiler)(*operation);
|
||||||
|
|
||||||
|
|
Reference in New Issue