Browse Source

Add null check to UI.setTheme. (#15326)

Change-Id: I2ab2d24ec05bb618969f59ea15d3a971f88009ca
tags/7.4.0.beta1
Sauli Tähkäpää 9 years ago
parent
commit
758300e27e

+ 6
- 6
server/src/com/vaadin/ui/UI.java View File

@@ -633,11 +633,7 @@ public abstract class UI extends AbstractSingleComponentContainer implements
this.embedId = embedId;

// Actual theme - used for finding CustomLayout templates
String unescapedThemeName = request.getParameter("theme");
if (unescapedThemeName != null) {
// Set theme escapes the name
setTheme(unescapedThemeName);
}
setTheme(request.getParameter("theme"));

getPage().init(request);

@@ -1168,7 +1164,11 @@ public abstract class UI extends AbstractSingleComponentContainer implements
* The new theme name
*/
public void setTheme(String theme) {
getState().theme = VaadinServlet.stripSpecialChars(theme);
if(theme == null) {
getState().theme = null;
} else {
getState().theme = VaadinServlet.stripSpecialChars(theme);
}
}

/**

+ 55
- 9
server/tests/src/com/vaadin/ui/UIThemeEscaping.java View File

@@ -15,29 +15,75 @@
*/
package com.vaadin.ui;

import org.junit.Assert;
import com.vaadin.server.VaadinRequest;
import org.junit.Before;
import org.junit.Test;

import com.vaadin.server.VaadinRequest;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class UIThemeEscaping {

@Test
public void testThemeEscaping() {
UI ui = new UI() {
private UI ui;

private void initUiWithTheme(String theme) {
VaadinRequest request = getRequestWithTheme(theme);

ui.doInit(request, 1234, "foobar");
}

private VaadinRequest getRequestWithTheme(String theme) {
VaadinRequest request = mock(VaadinRequest.class);

when(request.getParameter("theme")).thenReturn(theme);

return request;
}

@Before
public void setup() {
ui = new UI() {
@Override
protected void init(VaadinRequest request) {
// Nothing to do
}
};
}

@Test
public void dangerousCharactersAreRemoved() {
ui.setTheme("a<å(_\"$");

String theme = ui.getTheme();
assertThat(ui.getTheme(), is("aå_$"));
}

@Test
public void nullThemeIsSet() {
ui.setTheme("foobar");

ui.setTheme(null);

Assert.assertEquals(
"Dangerous characters should be removed from the theme name",
"aå_$", theme);
assertThat(ui.getTheme(), is(nullValue()));
}

@Test
public void themeIsSetOnInit() {
ui.setTheme("foobar");

initUiWithTheme("bar");

assertThat(ui.getTheme(), is("bar"));
}

@Test
public void nullThemeIsSetOnInit() {
ui.setTheme("foobar");

initUiWithTheme(null);

assertThat(ui.getTheme(), is(nullValue()));
}
}

Loading…
Cancel
Save