From fc0f1f9a1c3f0a0b56c0fa1dc376afafc8fbcee3 Mon Sep 17 00:00:00 2001 From: Yaroslav <43380144+MrIkso@users.noreply.github.com> Date: Sun, 25 May 2025 22:23:36 +0300 Subject: [PATCH] fix(gui): validate extensions list in file dialog (PR #2515) * fix(gui): fixed export file without extensions (close #2514) * don't add null extensions --------- Co-authored-by: Skylot <118523+skylot@users.noreply.github.com> --- .../jadx/gui/ui/filedialog/CustomFileChooser.java | 11 +++++++++-- .../jadx/gui/ui/filedialog/FileDialogWrapper.java | 2 +- .../jadx/gui/ui/popupmenu/JResourcePopupMenu.java | 4 +++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/filedialog/CustomFileChooser.java b/jadx-gui/src/main/java/jadx/gui/ui/filedialog/CustomFileChooser.java index b5fc19cd9..16224e051 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/filedialog/CustomFileChooser.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/filedialog/CustomFileChooser.java @@ -8,6 +8,7 @@ import java.io.File; import java.nio.file.Path; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import javax.swing.JDialog; import javax.swing.JFileChooser; @@ -15,6 +16,7 @@ import javax.swing.JOptionPane; import javax.swing.UIManager; import jadx.api.plugins.utils.CommonFileUtils; +import jadx.core.utils.StringUtils; import jadx.core.utils.Utils; import jadx.core.utils.files.FileUtils; import jadx.gui.ui.MainWindow; @@ -42,8 +44,13 @@ class CustomFileChooser extends JFileChooser { setAcceptAllFileFilterUsed(true); List fileExtList = data.getFileExtList(); if (Utils.notEmpty(fileExtList)) { - String description = NLS.str("file_dialog.supported_files") + ": (" + Utils.listToString(fileExtList) + ')'; - setFileFilter(new FileNameMultiExtensionFilter(description, fileExtList.toArray(new String[0]))); + List validFileExtList = fileExtList.stream() + .filter(StringUtils::notBlank) + .collect(Collectors.toList()); + if (Utils.notEmpty(validFileExtList)) { + String description = NLS.str("file_dialog.supported_files") + ": (" + Utils.listToString(validFileExtList) + ')'; + setFileFilter(new FileNameMultiExtensionFilter(description, validFileExtList.toArray(new String[0]))); + } } if (data.getSelectedFile() != null) { setSelectedFile(data.getSelectedFile().toFile()); diff --git a/jadx-gui/src/main/java/jadx/gui/ui/filedialog/FileDialogWrapper.java b/jadx-gui/src/main/java/jadx/gui/ui/filedialog/FileDialogWrapper.java index cf0f8fea9..4a6381fdd 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/filedialog/FileDialogWrapper.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/filedialog/FileDialogWrapper.java @@ -23,7 +23,7 @@ public class FileDialogWrapper { private boolean isOpen; private String title; - private List fileExtList; + private List fileExtList = new ArrayList<>(); private int selectionMode = JFileChooser.FILES_AND_DIRECTORIES; private @Nullable Path currentDir; private @Nullable Path selectedFile; diff --git a/jadx-gui/src/main/java/jadx/gui/ui/popupmenu/JResourcePopupMenu.java b/jadx-gui/src/main/java/jadx/gui/ui/popupmenu/JResourcePopupMenu.java index b618d7f1e..fd5db53a3 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/popupmenu/JResourcePopupMenu.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/popupmenu/JResourcePopupMenu.java @@ -67,7 +67,9 @@ public class JResourcePopupMenu extends JPopupMenu { String extension = CommonFileUtils.getFileExtension(resource.getName()); FileDialogWrapper fileDialog = new FileDialogWrapper(mainWindow, FileOpenMode.EXPORT_NODE); - fileDialog.setFileExtList(Collections.singletonList(extension)); + if (extension != null) { + fileDialog.setFileExtList(Collections.singletonList(extension)); + } Path currentDir = fileDialog.getCurrentDir(); if (currentDir != null) { fileDialog.setSelectedFile(currentDir.resolve(resource.getName()));