Add ASSERT_WITH_SECURITY_IMPLICATION to detect out of bounds access
[WebKit-https.git] / Source / WebCore / css / WebKitCSSTransformValue.cpp
1 /*
2  * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "WebKitCSSTransformValue.h"
28
29 #include "CSSValueList.h"
30 #include "WebCoreMemoryInstrumentation.h"
31 #include <wtf/PassRefPtr.h>
32 #include <wtf/text/WTFString.h>
33
34 namespace WebCore {
35
36 // These names must be kept in sync with TransformOperationType.
37 const char* const transformNamePrefixes[] = {
38     0,
39     "translate(",
40     "translateX(",
41     "translateY(",
42     "rotate(",
43     "scale(",
44     "scaleX(",
45     "scaleY(",
46     "skew(",
47     "skewX(",
48     "skewY(",
49     "matrix(",
50     "translateZ(",
51     "translate3d(",
52     "rotateX(",
53     "rotateY(",
54     "rotateZ(",
55     "rotate3d(",
56     "scaleZ(",
57     "scale3d(",
58     "perspective(",
59     "matrix3d("
60 };
61
62 static inline String transformValueToCssString(WebKitCSSTransformValue::TransformOperationType operation, const String& value)
63 {
64     if (operation != WebKitCSSTransformValue::UnknownTransformOperation) {
65         ASSERT_WITH_SECURITY_IMPLICATION(static_cast<size_t>(operation) < WTF_ARRAY_LENGTH(transformNamePrefixes));
66         return makeString(transformNamePrefixes[operation], value, ')');
67     }
68     return String();
69 }
70
71 WebKitCSSTransformValue::WebKitCSSTransformValue(TransformOperationType op)
72     : CSSValueList(WebKitCSSTransformClass, CommaSeparator)
73     , m_type(op)
74 {
75 }
76
77 String WebKitCSSTransformValue::customCssText() const
78 {
79     return transformValueToCssString(m_type, CSSValueList::customCssText());
80 }
81
82 #if ENABLE(CSS_VARIABLES)
83 String WebKitCSSTransformValue::customSerializeResolvingVariables(const HashMap<AtomicString, String>& variables) const
84 {
85     return transformValueToCssString(m_type, CSSValueList::customSerializeResolvingVariables(variables));
86 }
87 #endif
88
89 WebKitCSSTransformValue::WebKitCSSTransformValue(const WebKitCSSTransformValue& cloneFrom)
90     : CSSValueList(cloneFrom)
91     , m_type(cloneFrom.m_type)
92 {
93 }
94
95 PassRefPtr<WebKitCSSTransformValue> WebKitCSSTransformValue::cloneForCSSOM() const
96 {
97     return adoptRef(new WebKitCSSTransformValue(*this));
98 }
99
100 void WebKitCSSTransformValue::reportDescendantMemoryUsage(MemoryObjectInfo* memoryObjectInfo) const
101 {
102     MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS);
103     CSSValueList::reportDescendantMemoryUsage(memoryObjectInfo);
104 }
105
106 }