Changeset 201690 in webkit
- Timestamp:
- Jun 4, 2016 4:02:48 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r201687 r201690 1 2016-06-04 Darin Adler <darin@apple.com> 2 3 leaks seen in fast/css/variables tests 4 https://bugs.webkit.org/show_bug.cgi?id=150728 5 6 Reviewed by Anders Carlsson. 7 8 Fixes leaks seen running fast/css/variables tests with leak checking turned on. 9 10 * css/CSSPrimitiveValue.cpp: 11 (WebCore::isStringType): Added. For debugging purposes so we catch cases where we 12 are not treating strings consistently between construction and destruction. 13 (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Assert isStringType returns true. 14 (WebCore::CSSPrimitiveValue::cleanup): Added CSS_DIMENSION and CSS_PARSER_IDENTIFIER 15 to the list of types that have to decrement the reference count of the string we own. 16 Both types are passed to the string constructor above. 17 18 * css/CSSValueList.cpp: 19 (WebCore::CSSValueList::buildParserValueListSubstitutingVariables): Restructured the 20 code so we destroy any CSSParserValue that we don't use. This is needed because of the 21 peculiar requirements of CSSParserValue: it has a be a struct without a destructor so 22 it can be used in the CSS grammar, so we have to destroy it explicitly. Ideally we would 23 minimize any use of it outside the CSSParser itself, but as long as we are using it, we 24 need to do this explicit destruction. 25 1 26 2016-06-04 Anders Carlsson <andersca@apple.com> 2 27 -
trunk/Source/WebCore/css/CSSPrimitiveValue.cpp
r201290 r201690 65 65 switch (unitType) { 66 66 case CSSPrimitiveValue::CSS_CALC: 67 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH: 67 68 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER: 68 case CSSPrimitiveValue::CSS_C ALC_PERCENTAGE_WITH_LENGTH:69 case CSSPrimitiveValue::CSS_CHS: 69 70 case CSSPrimitiveValue::CSS_CM: 70 71 case CSSPrimitiveValue::CSS_DEG: 71 72 case CSSPrimitiveValue::CSS_DIMENSION: 72 #if ENABLE(CSS_IMAGE_RESOLUTION) || ENABLE(RESOLUTION_MEDIA_QUERY)73 case CSSPrimitiveValue::CSS_DPPX:74 case CSSPrimitiveValue::CSS_DPI:75 case CSSPrimitiveValue::CSS_DPCM:76 #endif77 73 case CSSPrimitiveValue::CSS_EMS: 78 74 case CSSPrimitiveValue::CSS_EXS: 75 case CSSPrimitiveValue::CSS_FR: 79 76 case CSSPrimitiveValue::CSS_GRAD: 80 77 case CSSPrimitiveValue::CSS_HZ: … … 84 81 case CSSPrimitiveValue::CSS_MS: 85 82 case CSSPrimitiveValue::CSS_NUMBER: 83 case CSSPrimitiveValue::CSS_PC: 86 84 case CSSPrimitiveValue::CSS_PERCENTAGE: 87 case CSSPrimitiveValue::CSS_PC:88 85 case CSSPrimitiveValue::CSS_PT: 89 86 case CSSPrimitiveValue::CSS_PX: 90 87 case CSSPrimitiveValue::CSS_RAD: 91 88 case CSSPrimitiveValue::CSS_REMS: 92 case CSSPrimitiveValue::CSS_CHS:93 89 case CSSPrimitiveValue::CSS_S: 94 90 case CSSPrimitiveValue::CSS_TURN: 91 case CSSPrimitiveValue::CSS_VH: 92 case CSSPrimitiveValue::CSS_VMAX: 93 case CSSPrimitiveValue::CSS_VMIN: 95 94 case CSSPrimitiveValue::CSS_VW: 96 case CSSPrimitiveValue::CSS_VH:97 case CSSPrimitiveValue::CSS_VMIN:98 case CSSPrimitiveValue::CSS_VMAX:99 case CSSPrimitiveValue::CSS_FR:100 95 return true; 96 case CSSPrimitiveValue::CSS_DPCM: 97 case CSSPrimitiveValue::CSS_DPI: 98 case CSSPrimitiveValue::CSS_DPPX: 99 #if ENABLE(CSS_IMAGE_RESOLUTION) || ENABLE(RESOLUTION_MEDIA_QUERY) 100 return true; 101 #else 102 return false; 103 #endif 101 104 case CSSPrimitiveValue::CSS_ATTR: 102 105 case CSSPrimitiveValue::CSS_COUNTER: 103 106 case CSSPrimitiveValue::CSS_COUNTER_NAME: 104 #if ENABLE(DASHBOARD_SUPPORT) 105 case CSSPrimitiveValue::CSS_DASHBOARD_REGION: 106 #endif 107 #if !ENABLE(CSS_IMAGE_RESOLUTION) && !ENABLE(RESOLUTION_MEDIA_QUERY) 108 case CSSPrimitiveValue::CSS_DPPX: 109 case CSSPrimitiveValue::CSS_DPI: 110 case CSSPrimitiveValue::CSS_DPCM: 111 #endif 107 case CSSPrimitiveValue::CSS_FONT_FAMILY: 112 108 case CSSPrimitiveValue::CSS_IDENT: 113 case CSSPrimitiveValue::CSS_PROPERTY_ID:114 case CSSPrimitiveValue::CSS_VALUE_ID:115 109 case CSSPrimitiveValue::CSS_PAIR: 116 110 case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR: … … 119 113 case CSSPrimitiveValue::CSS_PARSER_OPERATOR: 120 114 case CSSPrimitiveValue::CSS_PARSER_WHITESPACE: 115 case CSSPrimitiveValue::CSS_PROPERTY_ID: 116 case CSSPrimitiveValue::CSS_QUAD: 121 117 case CSSPrimitiveValue::CSS_RECT: 122 case CSSPrimitiveValue::CSS_QUAD:123 #if ENABLE(CSS_SCROLL_SNAP)124 case CSSPrimitiveValue::CSS_LENGTH_REPEAT:125 #endif126 118 case CSSPrimitiveValue::CSS_RGBCOLOR: 127 119 case CSSPrimitiveValue::CSS_SHAPE: 128 120 case CSSPrimitiveValue::CSS_STRING: 129 case CSSPrimitiveValue::CSS_FONT_FAMILY:130 121 case CSSPrimitiveValue::CSS_UNICODE_RANGE: 131 122 case CSSPrimitiveValue::CSS_UNKNOWN: 132 123 case CSSPrimitiveValue::CSS_URI: 124 case CSSPrimitiveValue::CSS_VALUE_ID: 125 #if ENABLE(CSS_SCROLL_SNAP) 126 case CSSPrimitiveValue::CSS_LENGTH_REPEAT: 127 #endif 128 #if ENABLE(DASHBOARD_SUPPORT) 129 case CSSPrimitiveValue::CSS_DASHBOARD_REGION: 130 #endif 133 131 return false; 134 132 } … … 137 135 return false; 138 136 } 137 138 #if !ASSERT_DISABLED 139 140 static inline bool isStringType(CSSPrimitiveValue::UnitTypes type) 141 { 142 switch (type) { 143 case CSSPrimitiveValue::CSS_STRING: 144 case CSSPrimitiveValue::CSS_URI: 145 case CSSPrimitiveValue::CSS_ATTR: 146 case CSSPrimitiveValue::CSS_COUNTER_NAME: 147 case CSSPrimitiveValue::CSS_DIMENSION: 148 case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR: 149 case CSSPrimitiveValue::CSS_PARSER_IDENTIFIER: 150 case CSSPrimitiveValue::CSS_PARSER_WHITESPACE: 151 return true; 152 case CSSPrimitiveValue::CSS_CALC: 153 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH: 154 case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER: 155 case CSSPrimitiveValue::CSS_CHS: 156 case CSSPrimitiveValue::CSS_CM: 157 case CSSPrimitiveValue::CSS_COUNTER: 158 case CSSPrimitiveValue::CSS_DEG: 159 case CSSPrimitiveValue::CSS_DPCM: 160 case CSSPrimitiveValue::CSS_DPI: 161 case CSSPrimitiveValue::CSS_DPPX: 162 case CSSPrimitiveValue::CSS_EMS: 163 case CSSPrimitiveValue::CSS_EXS: 164 case CSSPrimitiveValue::CSS_FONT_FAMILY: 165 case CSSPrimitiveValue::CSS_FR: 166 case CSSPrimitiveValue::CSS_GRAD: 167 case CSSPrimitiveValue::CSS_HZ: 168 case CSSPrimitiveValue::CSS_IDENT: 169 case CSSPrimitiveValue::CSS_IN: 170 case CSSPrimitiveValue::CSS_KHZ: 171 case CSSPrimitiveValue::CSS_MM: 172 case CSSPrimitiveValue::CSS_MS: 173 case CSSPrimitiveValue::CSS_NUMBER: 174 case CSSPrimitiveValue::CSS_PAIR: 175 case CSSPrimitiveValue::CSS_PARSER_INTEGER: 176 case CSSPrimitiveValue::CSS_PARSER_OPERATOR: 177 case CSSPrimitiveValue::CSS_PC: 178 case CSSPrimitiveValue::CSS_PERCENTAGE: 179 case CSSPrimitiveValue::CSS_PROPERTY_ID: 180 case CSSPrimitiveValue::CSS_PT: 181 case CSSPrimitiveValue::CSS_PX: 182 case CSSPrimitiveValue::CSS_QUAD: 183 case CSSPrimitiveValue::CSS_RAD: 184 case CSSPrimitiveValue::CSS_RECT: 185 case CSSPrimitiveValue::CSS_REMS: 186 case CSSPrimitiveValue::CSS_RGBCOLOR: 187 case CSSPrimitiveValue::CSS_S: 188 case CSSPrimitiveValue::CSS_SHAPE: 189 case CSSPrimitiveValue::CSS_TURN: 190 case CSSPrimitiveValue::CSS_UNICODE_RANGE: 191 case CSSPrimitiveValue::CSS_UNKNOWN: 192 case CSSPrimitiveValue::CSS_VALUE_ID: 193 case CSSPrimitiveValue::CSS_VH: 194 case CSSPrimitiveValue::CSS_VMAX: 195 case CSSPrimitiveValue::CSS_VMIN: 196 case CSSPrimitiveValue::CSS_VW: 197 #if ENABLE(DASHBOARD_SUPPORT) 198 case CSSPrimitiveValue::CSS_DASHBOARD_REGION: 199 #endif 200 #if ENABLE(CSS_SCROLL_SNAP) 201 case CSSPrimitiveValue::CSS_LENGTH_REPEAT: 202 #endif 203 return false; 204 } 205 206 ASSERT_NOT_REACHED(); 207 return false; 208 } 209 210 #endif // !ASSERT_DISABLED 139 211 140 212 CSSPrimitiveValue::UnitCategory CSSPrimitiveValue::unitCategory(CSSPrimitiveValue::UnitTypes type) … … 268 340 } 269 341 270 CSSPrimitiveValue::CSSPrimitiveValue(const String& str , UnitTypes type)342 CSSPrimitiveValue::CSSPrimitiveValue(const String& string, UnitTypes type) 271 343 : CSSValue(PrimitiveClass) 272 344 { 345 ASSERT(isStringType(type)); 273 346 m_primitiveUnitType = type; 274 if ((m_value.string = str .impl()))347 if ((m_value.string = string.impl())) 275 348 m_value.string->ref(); 276 349 } … … 448 521 void CSSPrimitiveValue::cleanup() 449 522 { 450 switch (static_cast<UnitTypes>(m_primitiveUnitType)) { 523 auto type = static_cast<UnitTypes>(m_primitiveUnitType); 524 switch (type) { 451 525 case CSS_STRING: 452 526 case CSS_URI: 453 527 case CSS_ATTR: 454 528 case CSS_COUNTER_NAME: 529 case CSS_DIMENSION: 455 530 case CSS_PARSER_HEXCOLOR: 531 case CSS_PARSER_IDENTIFIER: 456 532 case CSS_PARSER_WHITESPACE: 533 ASSERT(isStringType(type)); 457 534 if (m_value.string) 458 535 m_value.string->deref(); … … 527 604 case CSS_IDENT: 528 605 case CSS_RGBCOLOR: 529 case CSS_DIMENSION:530 606 case CSS_UNKNOWN: 531 607 case CSS_UNICODE_RANGE: 532 608 case CSS_PARSER_OPERATOR: 533 case CSS_PARSER_IDENTIFIER:534 609 case CSS_PROPERTY_ID: 535 610 case CSS_VALUE_ID: 611 ASSERT(!isStringType(type)); 536 612 break; 537 613 } -
trunk/Source/WebCore/css/CSSValueList.cpp
r201333 r201690 248 248 bool CSSValueList::buildParserValueListSubstitutingVariables(CSSParserValueList* parserList, const CustomPropertyValueMap& customProperties) const 249 249 { 250 for (unsigned i = 0; i < m_values.size(); ++i) { 251 CSSParserValue result; 252 result.id = CSSValueInvalid; 253 switch (m_values[i]->classType()) { 254 case FunctionClass: 255 if (!downcast<CSSFunctionValue>(*m_values[i].ptr()).buildParserValueSubstitutingVariables(&result, customProperties)) 256 return false; 250 for (auto& value : m_values) { 251 switch (value.get().classType()) { 252 case FunctionClass: { 253 CSSParserValue result; 254 result.id = CSSValueInvalid; 255 if (!downcast<CSSFunctionValue>(value.get()).buildParserValueSubstitutingVariables(&result, customProperties)) { 256 WebCore::destroy(result); 257 return false; 258 } 257 259 parserList->addValue(result); 258 260 break; 259 case ValueListClass: 260 if (!downcast<CSSValueList>(*m_values[i].ptr()).buildParserValueSubstitutingVariables(&result, customProperties)) 261 return false; 261 } 262 case ValueListClass: { 263 CSSParserValue result; 264 result.id = CSSValueInvalid; 265 if (!downcast<CSSValueList>(value.get()).buildParserValueSubstitutingVariables(&result, customProperties)) { 266 WebCore::destroy(result); 267 return false; 268 } 262 269 parserList->addValue(result); 263 270 break; 271 } 264 272 case VariableClass: { 265 if (!downcast<CSSVariableValue>( *m_values[i].ptr()).buildParserValueListSubstitutingVariables(parserList, customProperties))266 return false; 267 break; 268 } 269 case PrimitiveClass: 273 if (!downcast<CSSVariableValue>(value.get()).buildParserValueListSubstitutingVariables(parserList, customProperties)) 274 return false; 275 break; 276 } 277 case PrimitiveClass: { 270 278 // FIXME: Will have to change this if we start preserving invalid tokens. 271 if (downcast<CSSPrimitiveValue>(*m_values[i].ptr()).buildParserValue(&result)) 279 CSSParserValue result; 280 result.id = CSSValueInvalid; 281 if (downcast<CSSPrimitiveValue>(value.get()).buildParserValue(&result)) 272 282 parserList->addValue(result); 273 break; 283 else 284 WebCore::destroy(result); 285 break; 286 } 274 287 default: 275 288 ASSERT_NOT_REACHED(); 276 break;277 289 return false; 278 290 }
Note: See TracChangeset
for help on using the changeset viewer.