From: <rb...@us...> - 2014-02-12 16:53:16
|
Revision: 9125 http://sourceforge.net/p/htmlunit/code/9125 Author: rbri Date: 2014-02-12 16:53:13 +0000 (Wed, 12 Feb 2014) Log Message: ----------- Sanitize filenames constructed from URL's Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/XmlSerializer.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/StringUtils.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/util/StringUtilsTest.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2014-02-12 06:21:31 UTC (rev 9124) +++ trunk/htmlunit/src/changes/changes.xml 2014-02-12 16:53:13 UTC (rev 9125) @@ -8,6 +8,9 @@ <body> <release version="2.14" date="???" description="FF24, Bugfixes, initial work on IE11"> + <action type="fix" dev="rbri" issue="1574"> + Sanitize filenames constructed from URL's. + </action> <action type="fix" dev="rbri" issue="1575"> JavaScript: Use the correct url for checking if the origin header has to be added to a XMLHttpRequest. Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/XmlSerializer.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/XmlSerializer.java 2014-02-12 06:21:31 UTC (rev 9124) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/html/XmlSerializer.java 2014-02-12 16:53:13 UTC (rev 9125) @@ -273,6 +273,7 @@ name = StringUtils.substringBefore(name, "?"); // remove query name = StringUtils.substringBefore(name, ";"); // remove additional info name = StringUtils.substring(name, 0, 30); // many file systems have a limit at 255, let's limit it + name = com.gargoylesoftware.htmlunit.util.StringUtils.sanitizeForFileName(name); if (!name.endsWith(extension)) { name += extension; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java 2014-02-12 06:21:31 UTC (rev 9124) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/DebuggingWebConnection.java 2014-02-12 16:53:13 UTC (rev 9125) @@ -285,6 +285,7 @@ name = StringUtils.substringBefore(name, "?"); // remove query name = StringUtils.substringBefore(name, ";"); // remove additional info name = StringUtils.substring(name, 0, 30); // avoid exceptions due to too long file names + name = com.gargoylesoftware.htmlunit.util.StringUtils.sanitizeForFileName(name); if (!name.endsWith(extension)) { name += extension; } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/StringUtils.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/StringUtils.java 2014-02-12 06:21:31 UTC (rev 9124) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/util/StringUtils.java 2014-02-12 16:53:13 UTC (rev 9125) @@ -37,6 +37,7 @@ private static final Pattern HEX_COLOR = Pattern.compile("#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})"); private static final Pattern RGB_COLOR = Pattern.compile("rgb\\s*?\\(\\s*?(\\d{1,3})\\s*?,\\s*?(\\d{1,3})\\s*?,\\s*?(\\d{1,3})\\s*?\\)"); + private static final Pattern ILLEGAL_FILE_NAME_CHARS = Pattern.compile("\\\\|/|\\||:|\\?|\\*|\"|<|>|\\p{Cntrl}"); /** * Disallow instantiation of this class. @@ -265,4 +266,15 @@ new String[] {"\\", "$"}, new String[]{"\\\\", "\\$"}); return toReplace; } + + /** + * Sanitizes a string for use as filename. + * Replaces \, /, |, :, ?, *, ", <, >, control chars by _ (underscore). + * + * @param toSanitize the string to sanitize + * @return sanitized version of the given string + */ + public static String sanitizeForFileName(final String toSanitize) { + return ILLEGAL_FILE_NAME_CHARS.matcher(toSanitize).replaceAll("_"); + } } Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/util/StringUtilsTest.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/util/StringUtilsTest.java 2014-02-12 06:21:31 UTC (rev 9124) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/util/StringUtilsTest.java 2014-02-12 16:53:13 UTC (rev 9125) @@ -107,4 +107,13 @@ assertEquals("\\\\1", StringUtils.sanitizeForAppendReplacement("\\1")); assertEquals("\\\\1\\$2 \\\\3", StringUtils.sanitizeForAppendReplacement("\\1$2 \\3")); } + + /** + * Test for method {@link StringUtils#sanitizeForFileName(String)}. + */ + @Test + public void sanitizeForFileName() { + assertEquals("HtmlUnit", StringUtils.sanitizeForFileName("HtmlUnit")); + assertEquals("Html_Uni_", StringUtils.sanitizeForFileName("Html:Uni\t")); + } } |