blob: edf6f74e921add7fc0f01403d4070bf94bdbe8db [file] [log] [blame]
// Copyright (c) 2013, Mike Samuel
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// Neither the name of the OWASP nor the names of its contributors may
// be used to endorse or promote products derived from this software
// without specific prior written permission.
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
package org.owasp.html;
import java.util.Collections;
import org.junit.Test;
import junit.framework.TestCase;
public final class CssSchemaTest extends TestCase {
@Test
public static final void testDangerousProperties() {
for (String key : new String[] {
// May allow escaping informal visual containment when embedders are
// not particular about establishing a clipping region.
"display",
"float",
"clear",
"left",
"right",
// May ease trusted path violations by allowing links to impersonate
// controls in the embedding page.
"cursor",
// Allows code execution.
"-moz-binding",
}) {
assertSame(key, CssSchema.DISALLOWED, CssSchema.DEFAULT.forKey(key));
}
}
@Test
public static final void testDangerousTokens() {
for (String propName : CssSchema.DEFAULT_WHITELIST) {
CssSchema.Property property = CssSchema.DEFAULT.forKey(propName);
assertFalse(
propName,
property.literals.contains("expression"));
assertFalse(
propName,
property.fnKeys.containsKey("expression("));
assertFalse(
propName,
property.literals.contains("url"));
assertFalse(
propName,
property.fnKeys.containsKey("url("));
}
}
@Test
public static final void testCustom() {
CssSchema custom = CssSchema.union(
CssSchema.DEFAULT,
CssSchema.withProperties(Collections.singleton("float"))
);
for (String key : CssSchema.DEFINITIONS.keySet()) {
if (!key.equals("float")) {
assertSame(key, custom.forKey(key), CssSchema.DEFAULT.forKey(key));
}
}
CssSchema.Property cssFloat = custom.forKey("float");
assertTrue("left in float", cssFloat.literals.contains("left"));
}
}