mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-02-19 03:00:25 +01:00
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
"C:\bar\bin\service1C:\bar\bin\service2".
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=83539
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
[smcv: added commit message; used strncpy/strncat to avoid overflow]
Reviewed-by: Ralf Habacker <ralf.habacker@freenet.de>
This commit is contained in:
parent
36d864e469
commit
171cdd50fb
1 changed files with 12 additions and 5 deletions
|
|
@ -1493,12 +1493,19 @@ _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;
|
||||
|
||||
strcpy (retval, runtime_prefix);
|
||||
strcat (retval, configure_time_path + strlen (DBUS_PREFIX) + 1);
|
||||
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,
|
||||
remaining);
|
||||
}
|
||||
|
||||
/* Somehow, in some situations, backslashes get collapsed in the string.
|
||||
* Since windows C library accepts both forward and backslashes as
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue