Rebase webrtc/base with r6232:
cd webrtc/base
svn diff -r 6231:6232 http://webrtc.googlecode.com/svn/trunk/talk/base > 6232.diff
patch -p0 -i 6232.diff

BUG=3379
TBR=pbos@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/14599004

git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@6239 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/base/proxydetect.cc b/base/proxydetect.cc
index 7168886..7265f4f 100644
--- a/base/proxydetect.cc
+++ b/base/proxydetect.cc
@@ -621,27 +621,27 @@
   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<BYTE*>(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;
 }