Bug 1749122 - Fix nullptr deref in cubeb wasapi default devices query. a=aryx

Differential Revision: https://phabricator.services.mozilla.com/D135447
This commit is contained in:
Matthew Gregan 2022-01-08 19:53:45 +00:00
Родитель 7f6a59432d
Коммит b375771f7a
2 изменённых файлов: 21 добавлений и 9 удалений

Просмотреть файл

@ -19,5 +19,5 @@ origin:
license: "ISC"
# update.sh will update this value
release: "9e29d728b0025c674904f83f5a13a88d1a6a5edc (2022-01-08 10:44:20 +1300)"
release: "6f7226953255ebea4ee448a094eec13807620b0e (2022-01-09 08:45:52 +1300)"

Просмотреть файл

@ -199,6 +199,24 @@ struct wasapi_default_devices {
wasapi_get_default_device_id(eCapture, eCommunications, enumerator))
{
}
bool is_default(EDataFlow flow, ERole role, wchar_t const * id)
{
wchar_t const * default_id = nullptr;
if (flow == eRender && role == eConsole) {
default_id = this->render_console_id.get();
} else if (flow == eRender && role == eCommunications) {
default_id = this->render_comms_id.get();
} else if (flow == eCapture && role == eConsole) {
default_id = this->capture_console_id.get();
} else if (flow == eCapture && role == eCommunications) {
default_id = this->capture_comms_id.get();
}
return default_id && wcscmp(id, default_id) == 0;
}
private:
com_heap_ptr<wchar_t> render_console_id;
com_heap_ptr<wchar_t> render_comms_id;
com_heap_ptr<wchar_t> capture_console_id;
@ -3160,17 +3178,11 @@ wasapi_create_device(cubeb * ctx, cubeb_device_info & ret,
}
ret.preferred = CUBEB_DEVICE_PREF_NONE;
if ((flow == eRender &&
wcscmp(device_id.get(), defaults->render_console_id.get()) == 0) ||
(flow == eCapture &&
wcscmp(device_id.get(), defaults->capture_console_id.get()) == 0)) {
if (defaults->is_default(flow, eConsole, device_id.get())) {
ret.preferred =
(cubeb_device_pref)(ret.preferred | CUBEB_DEVICE_PREF_MULTIMEDIA |
CUBEB_DEVICE_PREF_NOTIFICATION);
} else if ((flow == eRender &&
wcscmp(device_id.get(), defaults->render_comms_id.get()) == 0) ||
(flow == eCapture &&
wcscmp(device_id.get(), defaults->capture_comms_id.get()) == 0)) {
} else if (defaults->is_default(flow, eCommunications, device_id.get())) {
ret.preferred =
(cubeb_device_pref)(ret.preferred | CUBEB_DEVICE_PREF_VOICE);
}