| LEFT | RIGHT |
| 1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
| 2 #include "PluginUserSettings.h" | 2 #include "PluginUserSettings.h" |
| 3 #include <algorithm> | 3 #include <algorithm> |
| 4 #include "COM_Value.h" | 4 #include "COM_Value.h" |
| 5 #include "PluginSettings.h" | 5 #include "PluginSettings.h" |
| 6 #include "PluginClient.h" | 6 #include "PluginClient.h" |
| 7 #include "../shared/Dictionary.h" | 7 #include "../shared/Dictionary.h" |
| 8 | 8 |
| 9 static const CString s_GetMessage = L"GetMessage"; | 9 static const CString s_GetMessage = L"GetMessage"; |
| 10 static const CString s_GetLanguageCount = L"GetLanguageCount"; | 10 static const CString s_GetLanguageCount = L"GetLanguageCount"; |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 return E_POINTER; | 124 return E_POINTER; |
| 125 | 125 |
| 126 if (pDispparams->cNamedArgs) | 126 if (pDispparams->cNamedArgs) |
| 127 return DISP_E_NONAMEDARGS; | 127 return DISP_E_NONAMEDARGS; |
| 128 | 128 |
| 129 CPluginSettings* settings = CPluginSettings::GetInstance(); | 129 CPluginSettings* settings = CPluginSettings::GetInstance(); |
| 130 | 130 |
| 131 if (dispidMember < 0 || dispidMember >= countof(s_Methods)) | 131 if (dispidMember < 0 || dispidMember >= countof(s_Methods)) |
| 132 return DISP_E_BADINDEX; | 132 return DISP_E_BADINDEX; |
| 133 | 133 |
| 134 /* |
| 135 * See Issue #1163. |
| 136 * TODO: Rewrite this linear sequence of string comparisons as a switch statem
ent. |
| 137 * TODO: Add a try-catch block at the top level of the switch body to rational
ize argument checking etc. |
| 138 */ |
| 134 const CString& method = s_Methods[dispidMember]; | 139 const CString& method = s_Methods[dispidMember]; |
| 135 | |
| 136 if (s_GetMessage == method) | 140 if (s_GetMessage == method) |
| 137 { | 141 { |
| 138 if (2 != pDispparams->cArgs) | 142 /* |
| 139 return DISP_E_BADPARAMCOUNT; | 143 * If the caller ignores the value, we can elide the body since it has no si
de-effects. |
| 140 | 144 */ |
| 141 if (VT_BSTR != pDispparams->rgvarg[0].vt) | 145 if (pVarResult) |
| 142 return DISP_E_TYPEMISMATCH; | 146 { |
| 143 | 147 if (2 != pDispparams->cArgs) |
| 144 if (pVarResult) | 148 return DISP_E_BADPARAMCOUNT; |
| 145 { | 149 |
| 146 AdblockPlus::COM::Incoming_Param key(pDispparams->rgvarg[0].bstrVal); | 150 AdblockPlus::COM::IncomingParam key(pDispparams->rgvarg[0]); |
| 147 AdblockPlus::COM::Incoming_Param section(pDispparams->rgvarg[1].bstrVal); | 151 AdblockPlus::COM::IncomingParam section(pDispparams->rgvarg[1]); |
| 148 CStringW message = sGetMessage(to_CString(section), to_CString(key)); | 152 if (!key.wstringConvertible() || !section.wstringConvertible()) |
| 153 { |
| 154 return DISP_E_TYPEMISMATCH; |
| 155 } |
| 156 CStringW message = sGetMessage(to_CString(section.wstringValueNoexcept()),
to_CString(key.wstringValueNoexcept())); |
| 149 | 157 |
| 150 pVarResult->vt = VT_BSTR; | 158 pVarResult->vt = VT_BSTR; |
| 151 pVarResult->bstrVal = SysAllocString(message); | 159 pVarResult->bstrVal = SysAllocString(message); |
| 152 } | 160 } |
| 153 } | 161 } |
| 154 else if (s_GetLanguageCount == method) | 162 else if (s_GetLanguageCount == method) |
| 155 { | 163 { |
| 156 if (pDispparams->cArgs) | 164 if (pDispparams->cArgs) |
| 157 return DISP_E_BADPARAMCOUNT; | 165 return DISP_E_BADPARAMCOUNT; |
| 158 | 166 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 } | 243 } |
| 236 } | 244 } |
| 237 else if (s_SetLanguage == method) | 245 else if (s_SetLanguage == method) |
| 238 { | 246 { |
| 239 if (1 != pDispparams->cArgs) | 247 if (1 != pDispparams->cArgs) |
| 240 return DISP_E_BADPARAMCOUNT; | 248 return DISP_E_BADPARAMCOUNT; |
| 241 | 249 |
| 242 if (VT_BSTR != pDispparams->rgvarg[0].vt) | 250 if (VT_BSTR != pDispparams->rgvarg[0].vt) |
| 243 return DISP_E_TYPEMISMATCH; | 251 return DISP_E_TYPEMISMATCH; |
| 244 | 252 |
| 245 AdblockPlus::COM::Incoming_Param url(pDispparams->rgvarg[0].bstrVal); | 253 AdblockPlus::COM::IncomingParam url(pDispparams->rgvarg[0]); |
| 246 settings->SetSubscription(url); | 254 if (!url.wstringConvertible()) |
| 255 { |
| 256 return DISP_E_TYPEMISMATCH; |
| 257 } |
| 258 settings->SetSubscription(url.wstringValueNoexcept()); |
| 247 } | 259 } |
| 248 else if (s_GetLanguage == method) | 260 else if (s_GetLanguage == method) |
| 249 { | 261 { |
| 250 if (pDispparams->cArgs) | 262 if (pDispparams->cArgs) |
| 251 return DISP_E_BADPARAMCOUNT; | 263 return DISP_E_BADPARAMCOUNT; |
| 252 | 264 |
| 253 if (pVarResult) | 265 if (pVarResult) |
| 254 { | 266 { |
| 255 CString url = settings->GetSubscription(); | 267 CString url = settings->GetSubscription(); |
| 256 | 268 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 281 } | 293 } |
| 282 } | 294 } |
| 283 else if (s_AddWhitelistDomain == method) | 295 else if (s_AddWhitelistDomain == method) |
| 284 { | 296 { |
| 285 if (1 != pDispparams->cArgs) | 297 if (1 != pDispparams->cArgs) |
| 286 return DISP_E_BADPARAMCOUNT; | 298 return DISP_E_BADPARAMCOUNT; |
| 287 | 299 |
| 288 if (VT_BSTR != pDispparams->rgvarg[0].vt) | 300 if (VT_BSTR != pDispparams->rgvarg[0].vt) |
| 289 return DISP_E_TYPEMISMATCH; | 301 return DISP_E_TYPEMISMATCH; |
| 290 | 302 |
| 291 AdblockPlus::COM::Incoming_Param domain(pDispparams->rgvarg[0].bstrVal); | 303 AdblockPlus::COM::IncomingParam domain_arg(pDispparams->rgvarg[0]); |
| 304 if (!domain_arg.wstringConvertible()) |
| 305 { |
| 306 return DISP_E_TYPEMISMATCH; |
| 307 } |
| 308 std::wstring domain = domain_arg.wstringValueNoexcept(); |
| 292 if (!domain.empty()) | 309 if (!domain.empty()) |
| 293 { | 310 { |
| 294 settings->AddWhiteListedDomain(to_CString(domain)); | 311 settings->AddWhiteListedDomain(to_CString(domain)); |
| 295 } | 312 } |
| 296 } | 313 } |
| 297 else if (s_RemoveWhitelistDomain == method) | 314 else if (s_RemoveWhitelistDomain == method) |
| 298 { | 315 { |
| 299 if (1 != pDispparams->cArgs) | 316 if (1 != pDispparams->cArgs) |
| 300 return DISP_E_BADPARAMCOUNT; | 317 return DISP_E_BADPARAMCOUNT; |
| 301 | 318 |
| 302 if (VT_BSTR != pDispparams->rgvarg[0].vt) | 319 if (VT_BSTR != pDispparams->rgvarg[0].vt) |
| 303 return DISP_E_TYPEMISMATCH; | 320 return DISP_E_TYPEMISMATCH; |
| 304 | 321 |
| 305 AdblockPlus::COM::Incoming_Param domain(pDispparams->rgvarg[0].bstrVal); | 322 AdblockPlus::COM::IncomingParam domain_arg(pDispparams->rgvarg[0]); |
| 323 if (!domain_arg.wstringConvertible()) |
| 324 { |
| 325 return DISP_E_TYPEMISMATCH; |
| 326 } |
| 327 std::wstring domain = domain_arg.wstringValueNoexcept(); |
| 306 if (!domain.empty()) | 328 if (!domain.empty()) |
| 307 { | 329 { |
| 308 settings->RemoveWhiteListedDomain(to_CString(domain)); | 330 settings->RemoveWhiteListedDomain(to_CString(domain)); |
| 309 } | 331 } |
| 310 } | 332 } |
| 311 else if (s_GetAppLocale == method) | 333 else if (s_GetAppLocale == method) |
| 312 { | 334 { |
| 313 if (0 != pDispparams->cArgs) | 335 if (0 != pDispparams->cArgs) |
| 314 return DISP_E_BADPARAMCOUNT; | 336 return DISP_E_BADPARAMCOUNT; |
| 315 | 337 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 CPluginClient* client = CPluginClient::GetInstance(); | 374 CPluginClient* client = CPluginClient::GetInstance(); |
| 353 client->RemoveSubscription(client->GetPref(L"subscriptions_exceptionsurl",
L"")); | 375 client->RemoveSubscription(client->GetPref(L"subscriptions_exceptionsurl",
L"")); |
| 354 } | 376 } |
| 355 } | 377 } |
| 356 else | 378 else |
| 357 return DISP_E_MEMBERNOTFOUND; | 379 return DISP_E_MEMBERNOTFOUND; |
| 358 | 380 |
| 359 return S_OK; | 381 return S_OK; |
| 360 } | 382 } |
| 361 | 383 |
| LEFT | RIGHT |