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

Side by Side Diff: compiled/filter/Filter.cpp

Issue 29721753: Issue 6180 - use ABP_TEXT everywhere in order to let String be a UTF-8 string (Closed) Base URL: https://github.com/adblockplus/adblockpluscore.git@adb2678354813ce5b6de095072954c5a784a7bc4
Patch Set: Created March 13, 2018, 6:20 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
OLDNEW
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-present eyeo GmbH 3 * Copyright (C) 2006-present 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 22 matching lines...) Expand all
33 { 33 {
34 StringMap<Filter*> knownFilters(8192); 34 StringMap<Filter*> knownFilters(8192);
35 35
36 void NormalizeWhitespace(DependentString& text) 36 void NormalizeWhitespace(DependentString& text)
37 { 37 {
38 String::size_type start = 0; 38 String::size_type start = 0;
39 String::size_type end = text.length(); 39 String::size_type end = text.length();
40 40
41 // Remove leading spaces and special characters like line breaks 41 // Remove leading spaces and special characters like line breaks
42 for (; start < end; start++) 42 for (; start < end; start++)
43 if (text[start] > ' ') 43 if (text[start] > ABP_TEXT(' '))
44 break; 44 break;
45 45
46 // Now look for invalid characters inside the string 46 // Now look for invalid characters inside the string
47 String::size_type pos; 47 String::size_type pos;
48 for (pos = start; pos < end; pos++) 48 for (pos = start; pos < end; pos++)
49 if (text[pos] < ' ') 49 if (text[pos] < ABP_TEXT(' '))
50 break; 50 break;
51 51
52 if (pos < end) 52 if (pos < end)
53 { 53 {
54 // Found invalid characters, copy all the valid characters while skipping 54 // Found invalid characters, copy all the valid characters while skipping
55 // the invalid ones. 55 // the invalid ones.
56 String::size_type delta = 1; 56 String::size_type delta = 1;
57 for (pos = pos + 1; pos < end; pos++) 57 for (pos = pos + 1; pos < end; pos++)
58 { 58 {
59 if (text[pos] < ' ') 59 if (text[pos] < ABP_TEXT(' '))
60 delta++; 60 delta++;
61 else 61 else
62 text[pos - delta] = text[pos]; 62 text[pos - delta] = text[pos];
63 } 63 }
64 end -= delta; 64 end -= delta;
65 } 65 }
66 66
67 // Remove trailing spaces 67 // Remove trailing spaces
68 for (; end > 0; end--) 68 for (; end > 0; end--)
69 if (text[end - 1] != ' ') 69 if (text[end - 1] != ABP_TEXT(' '))
70 break; 70 break;
71 71
72 // Set new string boundaries 72 // Set new string boundaries
73 text.reset(text, start, end - start); 73 text.reset(text, start, end - start);
74 } 74 }
75 } 75 }
76 76
77 Filter::Filter(Type type, const String& text) 77 Filter::Filter(Type type, const String& text)
78 : mText(text), mType(type) 78 : mText(text), mType(type)
79 { 79 {
80 annotate_address(this, "Filter"); 80 annotate_address(this, "Filter");
81 } 81 }
82 82
83 Filter::~Filter() 83 Filter::~Filter()
84 { 84 {
85 knownFilters.erase(mText); 85 knownFilters.erase(mText);
86 } 86 }
87 87
88 OwnedString Filter::Serialize() const 88 OwnedString Filter::Serialize() const
89 { 89 {
90 OwnedString result(u"[Filter]\ntext="_str); 90 OwnedString result(ABP_TEXT("[Filter]\ntext="_str));
91 result.append(mText); 91 result.append(mText);
92 result.append(u'\n'); 92 result.append(ABP_TEXT('\n'));
93 return result; 93 return result;
94 } 94 }
95 95
96 Filter* Filter::FromText(DependentString& text) 96 Filter* Filter::FromText(DependentString& text)
97 { 97 {
98 NormalizeWhitespace(text); 98 NormalizeWhitespace(text);
99 if (text.empty()) 99 if (text.empty())
100 return nullptr; 100 return nullptr;
101 101
102 // Parsing also normalizes the filter text, so it has to be done before the 102 // Parsing also normalizes the filter text, so it has to be done before the
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 break; 146 break;
147 case ElemHideFilter::classType: 147 case ElemHideFilter::classType:
148 filter = FilterPtr(new ElemHideFilter(text, data.elemhide), false); 148 filter = FilterPtr(new ElemHideFilter(text, data.elemhide), false);
149 break; 149 break;
150 case ElemHideException::classType: 150 case ElemHideException::classType:
151 filter = FilterPtr(new ElemHideException(text, data.elemhide), false); 151 filter = FilterPtr(new ElemHideException(text, data.elemhide), false);
152 break; 152 break;
153 case ElemHideEmulationFilter::classType: 153 case ElemHideEmulationFilter::classType:
154 filter = FilterPtr(new ElemHideEmulationFilter(text, data.elemhide), false ); 154 filter = FilterPtr(new ElemHideEmulationFilter(text, data.elemhide), false );
155 if (static_cast<ElemHideEmulationFilter*>(filter.get())->IsGeneric()) 155 if (static_cast<ElemHideEmulationFilter*>(filter.get())->IsGeneric())
156 filter = FilterPtr(new InvalidFilter(text, u"filter_elemhideemulation_no domain"_str), false); 156 filter = FilterPtr(new InvalidFilter(text, ABP_TEXT("filter_elemhideemul ation_nodomain"_str)), false);
157 break; 157 break;
158 default: 158 default:
159 // This should never happen but just in case 159 // This should never happen but just in case
160 return nullptr; 160 return nullptr;
161 } 161 }
162 162
163 enter_context("Adding to known filters"); 163 enter_context("Adding to known filters");
164 if (text != filter->mText) 164 if (text != filter->mText)
165 knownFilters[filter->mText] = filter.get(); 165 knownFilters[filter->mText] = filter.get();
166 else 166 else
167 // This is a hack: we looked up the entry using text but create it using 167 // This is a hack: we looked up the entry using text but create it using
168 // filter->mText. This works because both are equal at this point. However, 168 // filter->mText. This works because both are equal at this point. However,
169 // text refers to a temporary buffer which will go away. 169 // text refers to a temporary buffer which will go away.
170 knownFilter.assign(filter->mText, filter.get()); 170 knownFilter.assign(filter->mText, filter.get());
171 exit_context(); 171 exit_context();
172 172
173 return filter.release(); 173 return filter.release();
174 } 174 }
OLDNEW

Powered by Google App Engine
This is Rietveld