From f2b31bac2bc521945c8887b8a8c16df2d5845ac1 Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Mon, 8 Feb 2016 16:42:00 +0200 Subject: [PATCH] Fix removing extension from a connector that is not its parent (#19569) Change-Id: I0201c2dc94cd50d09931d54bb9e18893e6737d9c --- .../server/AbstractClientConnector.java | 5 +++ .../vaadin/tests/server/ExtensionTest.java | 40 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 server/tests/src/com/vaadin/tests/server/ExtensionTest.java diff --git a/server/src/com/vaadin/server/AbstractClientConnector.java b/server/src/com/vaadin/server/AbstractClientConnector.java index fa2b741ddd..c624663d50 100644 --- a/server/src/com/vaadin/server/AbstractClientConnector.java +++ b/server/src/com/vaadin/server/AbstractClientConnector.java @@ -589,6 +589,11 @@ public abstract class AbstractClientConnector implements ClientConnector, @Override public void removeExtension(Extension extension) { + if (extension.getParent() != this) { + throw new IllegalArgumentException( + "This connector is not the parent for given extension"); + } + extension.setParent(null); extensions.remove(extension); markAsDirty(); diff --git a/server/tests/src/com/vaadin/tests/server/ExtensionTest.java b/server/tests/src/com/vaadin/tests/server/ExtensionTest.java new file mode 100644 index 0000000000..8f8e8dcb59 --- /dev/null +++ b/server/tests/src/com/vaadin/tests/server/ExtensionTest.java @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.server; + +import org.junit.Test; + +import com.vaadin.server.AbstractClientConnector; +import com.vaadin.server.AbstractExtension; +import com.vaadin.ui.Label; +import com.vaadin.ui.TextField; + +public class ExtensionTest { + + public static class DummyExtension extends AbstractExtension { + public DummyExtension(AbstractClientConnector target) { + super(target); + } + } + + @Test(expected = IllegalArgumentException.class) + public void testRemoveExtensionFromWrongConnector() { + Label l = new Label(); + TextField t = new TextField(); + t.removeExtension(new DummyExtension(l)); + } + +} -- 2.39.5