From e667326df54bceb6ee1ecf49ab58eadb5d5b5966 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 16 Apr 2024 17:36:04 +0300 Subject: [PATCH] Kernel: Fix AML if parsing Parse else case unconditionally, even if _if_ case evaluates to true --- kernel/include/kernel/ACPI/AML/IfElse.h | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/kernel/include/kernel/ACPI/AML/IfElse.h b/kernel/include/kernel/ACPI/AML/IfElse.h index 184f0cb1..20357fd6 100644 --- a/kernel/include/kernel/ACPI/AML/IfElse.h +++ b/kernel/include/kernel/ACPI/AML/IfElse.h @@ -40,19 +40,17 @@ namespace Kernel::ACPI::AML } // Else - if (!predicate_integer.value()) + BAN::ConstByteSpan else_pkg; + if (outer_aml_data.size() >= 1 && static_cast(outer_aml_data[0]) == Byte::ElseOp) { - if (outer_aml_data.size() < 1 || static_cast(outer_aml_data[0]) != Byte::ElseOp) - context.aml_data = BAN::ConstByteSpan(); - else - { - outer_aml_data = outer_aml_data.slice(1); - auto else_pkg = AML::parse_pkg(outer_aml_data); - if (!else_pkg.has_value()) - return ParseResult::Failure; - context.aml_data = else_pkg.value(); - } + outer_aml_data = outer_aml_data.slice(1); + auto else_pkg_result = AML::parse_pkg(outer_aml_data); + if (!else_pkg_result.has_value()) + return ParseResult::Failure; + else_pkg = else_pkg_result.value(); } + if (!predicate_integer.value()) + context.aml_data = else_pkg; while (context.aml_data.size() > 0) {