Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Side by Side Diff: Source/core/css/CSSMatrix.cpp

Issue 1005523002: WebKitCSSMatrix: Avoid crash resolving relative lengths. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@default-initial-20150312
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « LayoutTests/transforms/cssmatrix-crash-expected.txt ('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 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 CSSMatrix::CSSMatrix(const TransformationMatrix& m) 50 CSSMatrix::CSSMatrix(const TransformationMatrix& m)
51 : m_matrix(m) 51 : m_matrix(m)
52 { 52 {
53 } 53 }
54 54
55 CSSMatrix::CSSMatrix(const String& s, ExceptionState& exceptionState) 55 CSSMatrix::CSSMatrix(const String& s, ExceptionState& exceptionState)
56 { 56 {
57 setMatrixValue(s, exceptionState); 57 setMatrixValue(s, exceptionState);
58 } 58 }
59 59
60 static inline PassRefPtr<LayoutStyle> createInitialStyle()
61 {
62 RefPtr<LayoutStyle> initialStyle = LayoutStyle::create();
63 initialStyle->font().update(nullptr);
64 return initialStyle;
65 }
66
60 void CSSMatrix::setMatrixValue(const String& string, ExceptionState& exceptionSt ate) 67 void CSSMatrix::setMatrixValue(const String& string, ExceptionState& exceptionSt ate)
61 { 68 {
62 if (string.isEmpty()) 69 if (string.isEmpty())
63 return; 70 return;
64 71
65 // FIXME: crbug.com/154772 - should this continue to use legacy style parsin g? 72 // FIXME: crbug.com/154772 - should this continue to use legacy style parsin g?
66 if (RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSProp ertyWebkitTransform, string)) { 73 if (RefPtrWillBeRawPtr<CSSValue> value = CSSParser::parseSingleValue(CSSProp ertyWebkitTransform, string)) {
67 // Check for a "none" transform. In these cases we can use the default i dentity matrix. 74 // Check for a "none" transform. In these cases we can use the default i dentity matrix.
68 if (value->isPrimitiveValue() && (toCSSPrimitiveValue(value.get()))->get ValueID() == CSSValueNone) 75 if (value->isPrimitiveValue() && (toCSSPrimitiveValue(value.get()))->get ValueID() == CSSValueNone)
69 return; 76 return;
70 77
71 // FIXME: This has a null pointer crash if we use ex units (crbug.com/41 4145) 78 DEFINE_STATIC_REF(LayoutStyle, initialStyle, createInitialStyle());
72 DEFINE_STATIC_REF(LayoutStyle, initialStyle, LayoutStyle::create());
73 TransformOperations operations; 79 TransformOperations operations;
74 if (!TransformBuilder::createTransformOperations(value.get(), CSSToLengt hConversionData(initialStyle, initialStyle, nullptr, 1.0f), operations)) { 80 if (!TransformBuilder::createTransformOperations(value.get(), CSSToLengt hConversionData(initialStyle, initialStyle, nullptr, 1.0f), operations)) {
75 exceptionState.throwDOMException(SyntaxError, "Failed to interpret ' " + string + "' as a transformation operation."); 81 exceptionState.throwDOMException(SyntaxError, "Failed to interpret ' " + string + "' as a transformation operation.");
76 return; 82 return;
77 } 83 }
78 84
79 // Convert transform operations to a TransformationMatrix. This can fail 85 // Convert transform operations to a TransformationMatrix. This can fail
80 // if a param has a percentage ('%') 86 // if a param has a percentage ('%')
81 if (operations.dependsOnBoxSize()) 87 if (operations.dependsOnBoxSize())
82 exceptionState.throwDOMException(SyntaxError, "The transformation de pends on the box size, which is not supported."); 88 exceptionState.throwDOMException(SyntaxError, "The transformation de pends on the box size, which is not supported.");
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 if (m_matrix.isAffine()) 190 if (m_matrix.isAffine())
185 return String::format("matrix(%f, %f, %f, %f, %f, %f)", m_matrix.a(), m_ matrix.b(), m_matrix.c(), m_matrix.d(), m_matrix.e(), m_matrix.f()); 191 return String::format("matrix(%f, %f, %f, %f, %f, %f)", m_matrix.a(), m_ matrix.b(), m_matrix.c(), m_matrix.d(), m_matrix.e(), m_matrix.f());
186 return String::format("matrix3d(%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f)", 192 return String::format("matrix3d(%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f)",
187 m_matrix.m11(), m_matrix.m12(), m_matrix.m13(), m_matrix.m14(), 193 m_matrix.m11(), m_matrix.m12(), m_matrix.m13(), m_matrix.m14(),
188 m_matrix.m21(), m_matrix.m22(), m_matrix.m23(), m_matrix.m24(), 194 m_matrix.m21(), m_matrix.m22(), m_matrix.m23(), m_matrix.m24(),
189 m_matrix.m31(), m_matrix.m32(), m_matrix.m33(), m_matrix.m34(), 195 m_matrix.m31(), m_matrix.m32(), m_matrix.m33(), m_matrix.m34(),
190 m_matrix.m41(), m_matrix.m42(), m_matrix.m43(), m_matrix.m44()); 196 m_matrix.m41(), m_matrix.m42(), m_matrix.m43(), m_matrix.m44());
191 } 197 }
192 198
193 } // namespace blink 199 } // namespace blink
OLDNEW
« no previous file with comments | « LayoutTests/transforms/cssmatrix-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698