Skip to content

Commit 03342d8

Browse files
committed
fix: prevent export of visualization files without .html or .html extension
1 parent 020f5ac commit 03342d8

File tree

1 file changed

+19
-4
lines changed
  • src/main/java/de/bwravencl/controllerbuddy/gui

1 file changed

+19
-4
lines changed

src/main/java/de/bwravencl/controllerbuddy/gui/Main.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,10 @@ public final class Main {
313313

314314
private static final Insets GRID_BAG_ITEM_INSETS = new Insets(8, DEFAULT_HGAP, 8, DEFAULT_HGAP);
315315

316+
private static final String[] HTML_FILE_EXTENSIONS = { "html", "htm" };
317+
318+
private static final String HTML_FILE_SUFFIX = fileSuffix(HTML_FILE_EXTENSIONS[0]);
319+
316320
private static final String[] ICON_RESOURCE_PATHS = { "/icon_16.png", "/icon_32.png", "/icon_64.png",
317321
"/icon_128.png" };
318322

@@ -422,7 +426,7 @@ public final class Main {
422426

423427
private static final String PROFILE_FILE_EXTENSION = "json";
424428

425-
private static final String PROFILE_FILE_SUFFIX = "." + PROFILE_FILE_EXTENSION;
429+
private static final String PROFILE_FILE_SUFFIX = fileSuffix(PROFILE_FILE_EXTENSION);
426430

427431
private static final int SETTINGS_LABEL_DIMENSION_HEIGHT = 15;
428432

@@ -1556,6 +1560,10 @@ private static void deleteSingleInstanceLockFile() {
15561560
}
15571561
}
15581562

1563+
private static String fileSuffix(final String extension) {
1564+
return "." + extension;
1565+
}
1566+
15591567
private static String getDefaultVJoyPath() {
15601568
return System.getenv("ProgramFiles") + File.separator + "vJoy";
15611569
}
@@ -2035,10 +2043,17 @@ private void executeWhileVisible(final Runnable runnable) {
20352043
});
20362044
}
20372045

2038-
public void exportVisualization(final File file) {
2046+
public void exportVisualization(File file) {
20392047
initTemplateSvgDocument();
20402048
Objects.requireNonNull(templateSvgDocument, "Field templateSvgDocument must not be null");
20412049

2050+
final var filename = file.getName().toLowerCase(Locale.ROOT);
2051+
final var missingExtension = Arrays.stream(HTML_FILE_EXTENSIONS)
2052+
.noneMatch(extension -> filename.endsWith(fileSuffix(extension)));
2053+
if (missingExtension) {
2054+
file = new File(file.getAbsoluteFile() + HTML_FILE_SUFFIX);
2055+
}
2056+
20422057
try {
20432058
final var domImplementation = documentBuilder.getDOMImplementation();
20442059
final var htmlDocumentType = domImplementation.createDocumentType("html", "-//W3C//DTD XHTML 1.1//EN",
@@ -4655,7 +4670,7 @@ private static final class HtmlFileChooser extends AbstractProfileFileChooser {
46554670
private static final long serialVersionUID = -1707951153902772391L;
46564671

46574672
private HtmlFileChooser(final File profileFile) {
4658-
super(new FileNameExtensionFilter(STRINGS.getString("HTML_FILE_DESCRIPTION"), "htm", "html"));
4673+
super(new FileNameExtensionFilter(STRINGS.getString("HTML_FILE_DESCRIPTION"), HTML_FILE_EXTENSIONS));
46594674

46604675
String filename;
46614676
if (profileFile != null) {
@@ -4665,7 +4680,7 @@ private HtmlFileChooser(final File profileFile) {
46654680
filename = STRINGS.getString("UNTITLED");
46664681
}
46674682

4668-
setSelectedFile(new File(filename + ".html"));
4683+
setSelectedFile(new File(filename + HTML_FILE_SUFFIX));
46694684
}
46704685
}
46714686

0 commit comments

Comments
 (0)