Bug 1462571 - Check dbus name by dbus_validate_bus_name() before use, r?jhorak
MozReview-Commit-ID: AxQp79oyRlm
--- a/toolkit/components/remote/nsDBusRemoteService.cpp
+++ b/toolkit/components/remote/nsDBusRemoteService.cpp
@@ -184,16 +184,26 @@ nsDBusRemoteService::Startup(const char*
profileName.ReplaceChar("+/=", '_');
nsAutoCString busName;
busName = nsPrintfCString("org.mozilla.%s.%s", mAppName.get(),
profileName.get());
if (busName.Length() > DBUS_MAXIMUM_NAME_LENGTH)
busName.Truncate(DBUS_MAXIMUM_NAME_LENGTH);
+ // We don't have a valid busName yet - try to create a default one.
+ if (!dbus_validate_bus_name(busName.get(), nullptr)) {
+ busName = nsPrintfCString("org.mozilla.%s.%s", mAppName.get(), "default");
+ if (!dbus_validate_bus_name(busName.get(), nullptr)) {
+ // We failed completelly to get a valid bus name - just quit
+ // to prevent crash at dbus_bus_request_name().
+ return NS_ERROR_FAILURE;
+ }
+ }
+
DBusError err;
dbus_error_init(&err);
dbus_bus_request_name(mConnection, busName.get(),
DBUS_NAME_FLAG_DO_NOT_QUEUE, &err);
// The interface is already owned - there is another application/profile
// instance already running.
if (dbus_error_is_set(&err)) {
dbus_error_free(&err);
--- a/widget/xremoteclient/DBusRemoteClient.cpp
+++ b/widget/xremoteclient/DBusRemoteClient.cpp
@@ -131,16 +131,27 @@ DBusRemoteClient::GetRemoteDestinationNa
NS_ENSURE_SUCCESS(rv, false);
profileName.ReplaceChar("+/=", '_');
aDestinationName = nsPrintfCString("org.mozilla.%s.%s", aProgram,
profileName.get());
if (aDestinationName.Length() > DBUS_MAXIMUM_NAME_LENGTH)
aDestinationName.Truncate(DBUS_MAXIMUM_NAME_LENGTH);
+ if (!dbus_validate_bus_name(aDestinationName.get(), nullptr)) {
+ // We don't have a valid busName yet - try to create a default one.
+ aDestinationName = nsPrintfCString("org.mozilla.%s.%s", aProgram,
+ "default");
+ if (!dbus_validate_bus_name(aDestinationName.get(), nullptr)) {
+ // We failed completelly to get a valid bus name - just quit
+ // to prevent crash at dbus_bus_request_name().
+ return false;
+ }
+ }
+
return true;
}
}
nsresult
DBusRemoteClient::DoSendDBusCommandLine(const char *aProgram, const char *aProfile,
const char* aBuffer, int aLength)
{
@@ -177,9 +188,8 @@ DBusRemoteClient::DoSendDBusCommandLine(
if (dbus_error_is_set(&err)) {
dbus_error_free(&err);
return NS_ERROR_FAILURE;
}
return NS_OK;
}
-