From 706152dcc9fc56c8bb05465487717bd5a84badb2 Mon Sep 17 00:00:00 2001 From: "pbos@webrtc.org" Date: Fri, 23 May 2014 14:35:48 +0000 Subject: [PATCH] Fix uninitialized reads in IsDefaultBrowserFirefox BUG= TEST=Local DrMemory. R=tommi@webrtc.org Review URL: https://webrtc-codereview.appspot.com/19529006 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6232 4adac7df-926f-26a2-2b94-8c16560cd09d --- talk/base/proxydetect.cc | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/talk/base/proxydetect.cc b/talk/base/proxydetect.cc index 7292f3b9fd..8f7f7f8726 100644 --- a/talk/base/proxydetect.cc +++ b/talk/base/proxydetect.cc @@ -638,27 +638,27 @@ bool IsDefaultBrowserFirefox() { if (ERROR_SUCCESS != result) return false; - wchar_t* value = NULL; DWORD size, type; + bool success = false; result = RegQueryValueEx(key, L"", 0, &type, NULL, &size); - if (REG_SZ != type) { - result = ERROR_ACCESS_DENIED; // Any error is fine - } else if (ERROR_SUCCESS == result) { - value = new wchar_t[size+1]; + if (result == ERROR_SUCCESS && type == REG_SZ) { + wchar_t* value = new wchar_t[size+1]; BYTE* buffer = reinterpret_cast(value); result = RegQueryValueEx(key, L"", 0, &type, buffer, &size); - } - RegCloseKey(key); - - bool success = false; - if (ERROR_SUCCESS == result) { - value[size] = L'\0'; - for (size_t i = 0; i < size; ++i) { - value[i] = tolowercase(value[i]); + if (result == ERROR_SUCCESS) { + // Size returned by RegQueryValueEx is in bytes, convert to number of + // wchar_t's. + size /= sizeof(value[0]); + value[size] = L'\0'; + for (size_t i = 0; i < size; ++i) { + value[i] = tolowercase(value[i]); + } + success = (NULL != strstr(value, L"firefox.exe")); } - success = (NULL != strstr(value, L"firefox.exe")); + delete[] value; } - delete [] value; + + RegCloseKey(key); return success; }