Chromium Code Reviews| Index: net/proxy/dhcp_proxy_script_adapter_fetcher_win.cc |
| diff --git a/net/proxy/dhcp_proxy_script_adapter_fetcher_win.cc b/net/proxy/dhcp_proxy_script_adapter_fetcher_win.cc |
| index 32baeb7a634dbd85a67efaaf7de4a74b912dcadc..5a24c63e509ce62e668ef9a3b83159b331c0096e 100644 |
| --- a/net/proxy/dhcp_proxy_script_adapter_fetcher_win.cc |
| +++ b/net/proxy/dhcp_proxy_script_adapter_fetcher_win.cc |
| @@ -265,13 +265,24 @@ std::string DhcpProxyScriptAdapterFetcher::GetPacURLFromDhcp( |
| LOG(INFO) << "Error fetching PAC URL from DHCP: " << res; |
| UMA_HISTOGRAM_COUNTS("Net.DhcpWpadUnhandledDhcpError", 1); |
| } else if (wpad_params.nBytesData) { |
| - // The result should be ASCII, not wide character. |
| - DCHECK_EQ(strlen(reinterpret_cast<const char*>(wpad_params.Data)) + 1, |
| - wpad_params.nBytesData); |
| - // Return only up to the first null in case of embedded NULLs; if the |
| - // server is giving us back a buffer with embedded NULLs, something is |
| - // broken anyway. |
| - return std::string(reinterpret_cast<const char *>(wpad_params.Data)); |
| +#ifndef NDEBUG |
| + // The result should be ASCII, not wide character. Some DHCP |
| + // servers appear to count the trailing NULL in nBytesData, others |
| + // do not. |
| + size_t count_without_null = |
| + strlen(reinterpret_cast<const char*>(wpad_params.Data)); |
| + DCHECK(count_without_null == wpad_params.nBytesData || |
| + count_without_null + 1 == wpad_params.nBytesData); |
| +#endif |
| + // Belt and suspenders: First, ensure we NULL-terminate after |
| + // nBytesData; this is the inner constructor with nBytesData as a |
| + // parameter. Then, return only up to the first null in case of |
| + // embedded NULLs; this is the outer constructor that takes the |
| + // result of c_str() on the inner. If the server is giving us |
| + // back a buffer with embedded NULLs, something is broken anyway. |
| + return std::string( |
| + std::string(reinterpret_cast<const char *>(wpad_params.Data), |
| + wpad_params.nBytesData).c_str()); |
|
eroman
2011/12/12 20:52:53
clever approach!
|
| } |
| return ""; |