Commit 171cdd50 authored by Milan Crha's avatar Milan Crha Committed by Simon McVittie

Fix creation of Exec path for files not in prefix

Doing strcat() into a static buffer produces incorrect results for
the second and subsequent services if they are not in the ${prefix};
for example, if the first call should have returned
"C:\bar\bin\service1" and the second should have returned
"C:\bar\bin\service2", the second result would actually be

Bug: default avatarSimon McVittie <>
[smcv: added commit message; used strncpy/strncat to avoid overflow]
Reviewed-by: Ralf Habacker's avatarRalf Habacker <>
parent 36d864e4
......@@ -1493,13 +1493,20 @@ _dbus_replace_install_prefix (const char *configure_time_path)
if ((!_dbus_get_install_root(runtime_prefix, len) ||
strncmp (configure_time_path, DBUS_PREFIX "/",
strlen (DBUS_PREFIX) + 1))) {
strcat (retval, configure_time_path);
return retval;
strncpy (retval, configure_time_path, sizeof (retval) - 1);
/* strncpy does not guarantee to 0-terminate the string */
retval[sizeof (retval) - 1] = '\0';
} else {
size_t remaining;
strncpy (retval, runtime_prefix, sizeof (retval) - 1);
retval[sizeof (retval) - 1] = '\0';
remaining = sizeof (retval) - 1 - strlen (retval);
strncat (retval,
configure_time_path + strlen (DBUS_PREFIX) + 1,
strcpy (retval, runtime_prefix);
strcat (retval, configure_time_path + strlen (DBUS_PREFIX) + 1);
/* Somehow, in some situations, backslashes get collapsed in the string.
* Since windows C library accepts both forward and backslashes as
* path separators, convert all backslashes to forward slashes.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment