summaryrefslogtreecommitdiffstats
path: root/src/core/hle/svc.cpp
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2017-10-04 19:05:13 +0200
committerSubv <subv2112@gmail.com>2017-10-04 21:03:59 +0200
commit7b09b30ef11d1d4001a50bbb91abdfb86b954ce2 (patch)
tree885601c5021a58356e2a5c78b06b5a76444dc8b9 /src/core/hle/svc.cpp
parentSVC: Replace GetPointer usage with ReadBlock in OutputDebugString. (diff)
downloadyuzu-7b09b30ef11d1d4001a50bbb91abdfb86b954ce2.tar
yuzu-7b09b30ef11d1d4001a50bbb91abdfb86b954ce2.tar.gz
yuzu-7b09b30ef11d1d4001a50bbb91abdfb86b954ce2.tar.bz2
yuzu-7b09b30ef11d1d4001a50bbb91abdfb86b954ce2.tar.lz
yuzu-7b09b30ef11d1d4001a50bbb91abdfb86b954ce2.tar.xz
yuzu-7b09b30ef11d1d4001a50bbb91abdfb86b954ce2.tar.zst
yuzu-7b09b30ef11d1d4001a50bbb91abdfb86b954ce2.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/svc.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp
index 37eeeb860..2ae177ab5 100644
--- a/src/core/hle/svc.cpp
+++ b/src/core/hle/svc.cpp
@@ -201,17 +201,21 @@ static ResultCode UnmapMemoryBlock(Kernel::Handle handle, u32 addr) {
}
/// Connect to an OS service given the port name, returns the handle to the port to out
-static ResultCode ConnectToPort(Kernel::Handle* out_handle, const char* port_name) {
- if (port_name == nullptr)
+static ResultCode ConnectToPort(Kernel::Handle* out_handle, VAddr port_name_address) {
+ if (!Memory::IsValidVirtualAddress(port_name_address))
return Kernel::ERR_NOT_FOUND;
- if (std::strlen(port_name) > 11)
+
+ static constexpr std::size_t PortNameMaxLength = 11;
+ // Read 1 char beyond the max allowed port name to detect names that are too long.
+ std::string port_name = Memory::ReadCString(port_name_address, PortNameMaxLength + 1);
+ if (port_name.size() > PortNameMaxLength)
return Kernel::ERR_PORT_NAME_TOO_LONG;
- LOG_TRACE(Kernel_SVC, "called port_name=%s", port_name);
+ LOG_TRACE(Kernel_SVC, "called port_name=%s", port_name.c_str());
auto it = Service::g_kernel_named_ports.find(port_name);
if (it == Service::g_kernel_named_ports.end()) {
- LOG_WARNING(Kernel_SVC, "tried to connect to unknown port: %s", port_name);
+ LOG_WARNING(Kernel_SVC, "tried to connect to unknown port: %s", port_name.c_str());
return Kernel::ERR_NOT_FOUND;
}