Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/plugin/PluginClientBase.cpp

Issue 6012307226230784: Issue #1234 - std::wstring version of UnescapeUrl (Closed)
Patch Set: Created Aug. 1, 2014, 1:49 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/plugin/PluginClientBase.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #include "PluginStdAfx.h" 1 #include "PluginStdAfx.h"
2 2
3 // Internet / FTP 3 // Internet / FTP
4 #include <wininet.h> 4 #include <wininet.h>
5 5
6 // IP adapter 6 // IP adapter
7 #include <iphlpapi.h> 7 #include <iphlpapi.h>
8 8
9 #include "PluginSettings.h" 9 #include "PluginSettings.h"
10 #include "PluginSystem.h" 10 #include "PluginSystem.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 unescapedUrl.ReleaseBuffer(); 59 unescapedUrl.ReleaseBuffer();
60 unescapedUrl.Truncate(cb); 60 unescapedUrl.Truncate(cb);
61 61
62 url.ReleaseBuffer(); 62 url.ReleaseBuffer();
63 url = unescapedUrl; 63 url = unescapedUrl;
64 } 64 }
65 65
66 return url; 66 return url;
67 } 67 }
68 68
69 void UnescapeUrl(std::wstring& url)
70 {
71 /*
72 * When the code can tolerate exceptions better,
73 * there's no reason to keep this try-catch statement in place.
74 */
75 try
76 {
77 DWORD result_length = INTERNET_MAX_URL_LENGTH;
78 /*
79 * The buffer length is greater than 2 Kb, so we keep it off the stack and a llocate it.
80 */
81 std::unique_ptr<wchar_t> result(new wchar_t[result_length]); // can throw ba d_alloc
sergei 2014/08/05 12:53:04 It's better to use `std::unique_ptr<wchar_t[]>`.
Eric 2014/08/05 13:09:10 Yep. Missed that one.
82 /*
83 * Casting away const here is harmless because we're not using the in-place modification mode of UrlUnescape
84 */
85 HRESULT hr = UrlUnescapeW(const_cast<wchar_t *>(url.c_str()), result.get(), & result_length, 0);
Oleksandr 2014/08/05 12:20:58 Nit: no space after &
Eric 2014/08/05 17:53:01 Done.
86 if (hr == S_OK)
87 {
88 url = std::wstring(result.get(), result_length);
89 }
90 /*
91 * If the call to UrlUnescape fails, we don't alter the string.
92 * This matches the behavior of the previous version of this function.
93 * Because there's no error handling, however, this masks failures in UrlUne scape.
94 */
95 }
96 catch(...)
97 {
Oleksandr 2014/08/05 12:20:58 I personally am very cautious with empty catch-all
sergei 2014/08/05 12:53:04 +1 here. Each time such all exception eating const
Eric 2014/08/05 13:09:10 Look, I agree with both of you. I do not like blan
98 // no modification if exception
99 }
100 }
69 101
70 void CPluginClientBase::LogPluginError(DWORD errorCode, int errorId, int errorSu bid, const CString& description, bool isAsync, DWORD dwProcessId, DWORD dwThread Id) 102 void CPluginClientBase::LogPluginError(DWORD errorCode, int errorId, int errorSu bid, const CString& description, bool isAsync, DWORD dwProcessId, DWORD dwThread Id)
71 { 103 {
72 // Prevent circular references 104 // Prevent circular references
73 if (CPluginSettings::HasInstance() && isAsync) 105 if (CPluginSettings::HasInstance() && isAsync)
74 { 106 {
75 DEBUG_ERROR_CODE_EX(errorCode, description, dwProcessId, dwThreadId); 107 DEBUG_ERROR_CODE_EX(errorCode, description, dwProcessId, dwThreadId);
76 108
77 CString pluginError; 109 CString pluginError;
78 pluginError.Format(L"%2.2d%2.2d", errorId, errorSubid); 110 pluginError.Format(L"%2.2d%2.2d", errorId, errorSubid);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 150
119 hasError = true; 151 hasError = true;
120 152
121 s_pluginErrors.erase(it); 153 s_pluginErrors.erase(it);
122 } 154 }
123 } 155 }
124 s_criticalSectionLocal.Unlock(); 156 s_criticalSectionLocal.Unlock();
125 157
126 return hasError; 158 return hasError;
127 } 159 }
OLDNEW
« no previous file with comments | « src/plugin/PluginClientBase.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld