| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 /** | 148 /** |
| 149 * Determine if the HTML file is one of ours. | 149 * Determine if the HTML file is one of ours. |
| 150 * The criterion is that it appear in the "html/templates" folder within our i
nstallation. | 150 * The criterion is that it appear in the "html/templates" folder within our i
nstallation. |
| 151 * | 151 * |
| 152 * Warning: This function may fail if the argument is not a "file://" URL. | 152 * Warning: This function may fail if the argument is not a "file://" URL. |
| 153 * This is occasionally the case in circumstances yet to be characterized. | 153 * This is occasionally the case in circumstances yet to be characterized. |
| 154 */ | 154 */ |
| 155 bool IsOurHtmlFile(const std::wstring& url) | 155 bool IsOurHtmlFile(const std::wstring& url) |
| 156 { | 156 { |
| 157 // Declared static because the value is derived from an installation directo
ry, which won't change during run-time. | 157 // Declared static because the value is derived from an installation directo
ry, which won't change during run-time. |
| 158 static auto dir = FileUrl(HtmlFolderPath()); | 158 static auto dir = CanonicalizeUrl(FileUrl(HtmlFolderPath())); |
| 159 | 159 |
| 160 dir = EscapeUrl(CanonicalizeUrl(dir)); | 160 std::wstring urlCanonical = CanonicalizeUrl(url); |
| 161 std::wstring urlCanonicalized = EscapeUrl(CanonicalizeUrl(url)); | |
| 162 | 161 |
| 163 DEBUG_GENERAL([&]() -> std::wstring { | 162 DEBUG_GENERAL([&]() -> std::wstring { |
| 164 std::wstring log = L"InjectABP. Current URL: "; | 163 std::wstring log = L"InjectABP. Current URL: "; |
| 165 log += urlCanonicalized; | 164 log += urlCanonical; |
| 166 log += L", template directory URL: "; | 165 log += L", template directory URL: "; |
| 167 log += dir; | 166 log += dir; |
| 168 return log; | 167 return log; |
| 169 }()); | 168 }()); |
| 170 | 169 |
| 171 /* | 170 /* |
| 172 * The length check here is defensive, in case the document URL is truncated
for some reason. | 171 * The length check here is defensive, in case the document URL is truncated
for some reason. |
| 173 */ | 172 */ |
| 174 if (urlCanonicalized.length() < 5) | 173 if (urlCanonical.length() < 5) |
| 175 { | 174 { |
| 176 // We can't match ".html" at the end of the URL if it's too short. | 175 // We can't match ".html" at the end of the URL if it's too short. |
| 177 return false; | 176 return false; |
| 178 } | 177 } |
| 179 auto urlCstr = urlCanonicalized.c_str(); | 178 auto urlCstr = urlCanonical.c_str(); |
| 180 // Check the prefix to match our directory | 179 // Check the prefix to match our directory |
| 181 // Check the suffix to be an HTML file | 180 // Check the suffix to be an HTML file |
| 182 // Compare escaped version and return | |
| 183 return (_wcsnicmp(urlCstr, dir.c_str(), dir.length()) == 0) && | 181 return (_wcsnicmp(urlCstr, dir.c_str(), dir.length()) == 0) && |
| 184 (_wcsnicmp(urlCstr + url.length() - 5, L".html", 5) == 0); | 182 (_wcsnicmp(urlCstr + urlCanonical.length() - 5, L".html", 5) == 0); |
| 185 } | 183 } |
| 186 } | 184 } |
| 187 | 185 |
| 188 void CPluginTab::InjectABP(IWebBrowser2* browser) | 186 void CPluginTab::InjectABP(IWebBrowser2* browser) |
| 189 { | 187 { |
| 190 CriticalSection::Lock lock(m_csInject); | 188 CriticalSection::Lock lock(m_csInject); |
| 191 auto url = GetDocumentUrl(); | 189 auto url = GetDocumentUrl(); |
| 192 if (!IsOurHtmlFile(url)) | 190 if (!IsOurHtmlFile(url)) |
| 193 { | 191 { |
| 194 DEBUG_GENERAL(L"InjectABP. Not injecting"); | 192 DEBUG_GENERAL(L"InjectABP. Not injecting"); |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 LogQueue::LogPluginError(pluginError.GetErrorCode(), pluginError.GetEr
rorId(), pluginError.GetErrorSubid(), pluginError.GetErrorDescription(), true, p
luginError.GetProcessId(), pluginError.GetThreadId()); | 617 LogQueue::LogPluginError(pluginError.GetErrorCode(), pluginError.GetEr
rorId(), pluginError.GetErrorSubid(), pluginError.GetErrorDescription(), true, p
luginError.GetProcessId(), pluginError.GetThreadId()); |
| 620 } | 618 } |
| 621 | 619 |
| 622 // Non-hanging sleep | 620 // Non-hanging sleep |
| 623 Sleep(50); | 621 Sleep(50); |
| 624 } | 622 } |
| 625 | 623 |
| 626 tabLoopIteration++; | 624 tabLoopIteration++; |
| 627 } | 625 } |
| 628 } | 626 } |
| OLD | NEW |