From 1972c2d44eb09518c1266acdd491e03135e5d351 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 8 Oct 2017 15:54:12 +0200 Subject: 2385 Only allow very limited set of characters in file names --- .../antennapod/core/storage/DownloadRequester.java | 4 +-- .../antennapod/core/util/FileNameGenerator.java | 29 ++++++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java index 04afc504b..7051d7f4d 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java @@ -345,9 +345,7 @@ public class DownloadRequester { // Try to generate the filename by the item title if (media.getItem() != null && media.getItem().getTitle() != null) { String title = media.getItem().getTitle(); - // Delete reserved characters - titleBaseFilename = title.replaceAll("[^a-zA-Z0-9 ._()-]", ""); - titleBaseFilename = titleBaseFilename.trim(); + titleBaseFilename = FileNameGenerator.generateFileName(title); } String URLBaseFilename = URLUtil.guessFileName(media.getDownload_url(), diff --git a/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java index 30c2e62f2..8da176c82 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java +++ b/core/src/main/java/de/danoeh/antennapod/core/util/FileNameGenerator.java @@ -1,18 +1,21 @@ package de.danoeh.antennapod.core.util; +import org.apache.commons.lang3.ArrayUtils; + import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** Generates valid filenames for a given string. */ public class FileNameGenerator { - private static final char[] ILLEGAL_CHARACTERS = { '/', '\\', '?', '%', - '*', ':', '|', '"', '<', '>', '\n' }; - static { - Arrays.sort(ILLEGAL_CHARACTERS); - } + private static final char[] validChars = ( + "abcdefghijklmnopqrstuvwxyz" + + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + "0123456789" + + " _-").toCharArray(); private FileNameGenerator() { - } /** @@ -20,17 +23,17 @@ public class FileNameGenerator { * characters of the given string. */ public static String generateFileName(String string) { - StringBuilder builder = new StringBuilder(); + StringBuilder buf = new StringBuilder(); for (int i = 0; i < string.length(); i++) { char c = string.charAt(i); - if (Arrays.binarySearch(ILLEGAL_CHARACTERS, c) < 0) { - builder.append(c); + if(Character.isSpaceChar(c) && (buf.length() == 0 || Character.isSpaceChar(buf.charAt(buf.length()-1)))) { + continue; + } + if (ArrayUtils.contains(validChars, c)) { + buf.append(c); } } - return builder.toString().replaceFirst(" *$",""); + return buf.toString().trim(); } - public static long generateLong(final String str) { - return str.hashCode(); - } } -- cgit v1.2.3