The test case below results in a StackOverflowError:
@Test
public void shouldDetectNestedInfiniteLoop() throws IOException {
Stylesheet stylesheet = new CssParser().parse("userAgentStylSheet", """
.root {
-fx-base-fill: ladder(-fx-base, white 49%, black 50%);
-fx-base: ladder(-fx-base-fill, white 49%, black 50%);
}
.pane {
-fx-background-color: -fx-base;
}
""");
StyleManager.getInstance().setDefaultUserAgentStylesheet(stylesheet);
Pane a = new Pane();
a.getStyleClass().add("pane");
root.getChildren().addAll(a);
assertDoesNotThrow(() -> stage.show()); // This should not result in a StackOverflowError
}
@Test
public void shouldDetectNestedInfiniteLoop() throws IOException {
Stylesheet stylesheet = new CssParser().parse("userAgentStylSheet", """
.root {
-fx-base-fill: ladder(-fx-base, white 49%, black 50%);
-fx-base: ladder(-fx-base-fill, white 49%, black 50%);
}
.pane {
-fx-background-color: -fx-base;
}
""");
StyleManager.getInstance().setDefaultUserAgentStylesheet(stylesheet);
Pane a = new Pane();
a.getStyleClass().add("pane");
root.getChildren().addAll(a);
assertDoesNotThrow(() -> stage.show()); // This should not result in a StackOverflowError
}
- links to
-
Commit(master) openjdk/jfx/f7ad5cdc
-
Review(master) openjdk/jfx/1505