From be1ae17c61ff6d2ae4a36d3edb36179c1fdd2aa8 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Sat, 7 Jul 2018 18:38:38 +0200 Subject: [PATCH 1/3] Fix parameter_size in GetStartupArgument --- src/core/hle/service/apt/apt.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 5efd2dd20..5efa92aca 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -620,12 +620,12 @@ void Module::Interface::GetStartupArgument(Kernel::HLERequestContext& ctx) { u32 parameter_size = rp.Pop(); StartupArgumentType startup_argument_type = static_cast(rp.Pop()); - if (parameter_size >= 0x300) { + if (parameter_size > 0x300) { + parameter_size = 0x300; LOG_ERROR( Service_APT, "Parameter size is outside the valid range (capped to 0x300): parameter_size={:#010X}", parameter_size); - return; } std::vector parameter(parameter_size, 0); From 468c689cf4d0d223763a011448269cc6b4960731 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Sat, 7 Jul 2018 18:52:27 +0200 Subject: [PATCH 2/3] Set max parameter_size to 0x1000 --- src/core/hle/service/apt/apt.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 5efa92aca..b34a14493 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -620,12 +620,14 @@ void Module::Interface::GetStartupArgument(Kernel::HLERequestContext& ctx) { u32 parameter_size = rp.Pop(); StartupArgumentType startup_argument_type = static_cast(rp.Pop()); - if (parameter_size > 0x300) { - parameter_size = 0x300; - LOG_ERROR( - Service_APT, - "Parameter size is outside the valid range (capped to 0x300): parameter_size={:#010X}", - parameter_size); + const u32 max_parameter_size{0x1000}; + + if (parameter_size > max_parameter_size) { + parameter_size = max_parameter_size; + LOG_ERROR(Service_APT, + "Parameter size is outside the valid range (capped to {:#010X}): " + "parameter_size={:#010X}", + max_parameter_size, parameter_size); } std::vector parameter(parameter_size, 0); From 208e78918222294c0f97f25ccb41f4176e48a8a4 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Wed, 11 Jul 2018 09:00:05 +0200 Subject: [PATCH 3/3] Fix error log --- src/core/hle/service/apt/apt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index b34a14493..98c263b64 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -623,11 +623,11 @@ void Module::Interface::GetStartupArgument(Kernel::HLERequestContext& ctx) { const u32 max_parameter_size{0x1000}; if (parameter_size > max_parameter_size) { - parameter_size = max_parameter_size; LOG_ERROR(Service_APT, "Parameter size is outside the valid range (capped to {:#010X}): " "parameter_size={:#010X}", max_parameter_size, parameter_size); + parameter_size = max_parameter_size; } std::vector parameter(parameter_size, 0);