From 207fb0b1ea3bcc6d419f709d6c881e94876bc86e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 31 Mar 2005 19:32:50 +0000 Subject: [PATCH] Fixed _user_get_safemode_option(): the bufferSize passed in got overwritten with the number of the actual string length, but it was still used for a subsequent user_strlcpy() to the user buffer - therefore, it cut off one byte from the result string. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12202 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/core/device_manager/settings.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/kernel/core/device_manager/settings.cpp b/src/kernel/core/device_manager/settings.cpp index ae80786ecc..c06bcf7177 100644 --- a/src/kernel/core/device_manager/settings.cpp +++ b/src/kernel/core/device_manager/settings.cpp @@ -41,7 +41,7 @@ _user_get_safemode_option(const char *userParameter, char *userBuffer, size_t *_ { char parameter[B_FILE_NAME_LENGTH]; char buffer[B_PATH_NAME_LENGTH]; - size_t bufferSize; + size_t bufferSize, originalBufferSize; if (!IS_USER_ADDRESS(userParameter) || !IS_USER_ADDRESS(userBuffer) || !IS_USER_ADDRESS(_userBufferSize) @@ -52,9 +52,10 @@ _user_get_safemode_option(const char *userParameter, char *userBuffer, size_t *_ if (bufferSize > B_PATH_NAME_LENGTH) bufferSize = B_PATH_NAME_LENGTH; + originalBufferSize = bufferSize; status_t status = get_safemode_option(parameter, buffer, &bufferSize); - if (user_strlcpy(userBuffer, buffer, bufferSize) < B_OK + if (user_strlcpy(userBuffer, buffer, originalBufferSize) < B_OK || user_memcpy(_userBufferSize, &bufferSize, sizeof(size_t)) < B_OK) return B_BAD_ADDRESS;