public static boolean isNormalizedPathOutsideWorkingDir(String path) { final String normalize = FilenameUtils.normalize(path); final String prefix = FilenameUtils.getPrefix(normalize); return (normalize != null && StringUtils.isBlank(prefix)); } }
return getPrefix(filename); // add end slash if necessary } else { return filename;
/** * Does the work of getting the path. * * @param filename the filename * @param includeSeparator true to include the end separator * @return the path */ private static String doGetFullPath(String filename, boolean includeSeparator) { if (filename == null) { return null; } int prefix = getPrefixLength(filename); if (prefix < 0) { return null; } if (prefix >= filename.length()) { if (includeSeparator) { return getPrefix(filename); // add end slash if necessary } else { return filename; } } int index = indexOfLastSeparator(filename); if (index < 0) { return filename.substring(0, prefix); } int end = index + (includeSeparator ? 1 : 0); return filename.substring(0, end); }
@Test public void testGetPrefix() { assertEquals(null, FilenameUtils.getPrefix(null)); assertEquals(null, FilenameUtils.getPrefix(":")); assertEquals(null, FilenameUtils.getPrefix("1:\\a\\b\\c.txt")); assertEquals(null, FilenameUtils.getPrefix("1:")); assertEquals(null, FilenameUtils.getPrefix("1:a")); assertEquals(null, FilenameUtils.getPrefix("\\\\\\a\\b\\c.txt")); assertEquals(null, FilenameUtils.getPrefix("\\\\a")); assertEquals("", FilenameUtils.getPrefix("")); assertEquals("\\", FilenameUtils.getPrefix("\\")); assertEquals("C:", FilenameUtils.getPrefix("C:")); assertEquals("C:\\", FilenameUtils.getPrefix("C:\\")); assertEquals("//server/", FilenameUtils.getPrefix("//server/")); assertEquals("~/", FilenameUtils.getPrefix("~")); assertEquals("~/", FilenameUtils.getPrefix("~/")); assertEquals("~user/", FilenameUtils.getPrefix("~user")); assertEquals("~user/", FilenameUtils.getPrefix("~user/")); assertEquals("", FilenameUtils.getPrefix("a\\b\\c.txt")); assertEquals("\\", FilenameUtils.getPrefix("\\a\\b\\c.txt")); assertEquals("C:\\", FilenameUtils.getPrefix("C:\\a\\b\\c.txt")); assertEquals("\\\\server\\", FilenameUtils.getPrefix("\\\\server\\a\\b\\c.txt")); assertEquals("", FilenameUtils.getPrefix("a/b/c.txt")); assertEquals("/", FilenameUtils.getPrefix("/a/b/c.txt")); assertEquals("C:/", FilenameUtils.getPrefix("C:/a/b/c.txt")); assertEquals("//server/", FilenameUtils.getPrefix("//server/a/b/c.txt")); assertEquals("~/", FilenameUtils.getPrefix("~/a/b/c.txt"));
private String parent(final String absolute) { final String prefix = FilenameUtils.getPrefix(absolute); if(absolute.equals(prefix)) { return null; } int index = absolute.length() - 1; if(absolute.charAt(index) == this.getDelimiter()) { if(index > 0) { index--; } } final int cut = absolute.lastIndexOf(this.getDelimiter(), index); if(cut > FilenameUtils.getPrefixLength(absolute)) { return absolute.substring(0, cut); } return String.valueOf(prefix); }
@Test public void testGetPrefix_with_nullbyte() { try { assertEquals("~user\\", FilenameUtils.getPrefix("~u\u0000ser\\a\\b\\c.txt")); } catch (final IllegalArgumentException ignore) { } }
/** * Does the work of getting the path. * * @param filename the filename * @param includeSeparator true to include the end separator * @return the path */ private static String doGetFullPath(String filename, boolean includeSeparator) { if (filename == null) { return null; } int prefix = getPrefixLength(filename); if (prefix < 0) { return null; } if (prefix >= filename.length()) { if (includeSeparator) { return getPrefix(filename); // add end slash if necessary } else { return filename; } } int index = indexOfLastSeparator(filename); if (index < 0) { return filename.substring(0, prefix); } int end = index + (includeSeparator ? 1 : 0); return filename.substring(0, end); }
/** * Gets the prefix from a full filename. * <p/> * The prefix includes the first slash in the full filename where applicable. * * <pre> * a/b/c.txt --> "" --> relative * /a/b/c.txt --> "/" --> absolute * </pre> * <p/> * * @param filename * the filename to query, null returns null * @return the prefix of the file, null if invalid */ public static String getPrefix( final String filename ) { return FilenameUtils.getPrefix( filename ); }
/** * Does the work of getting the path. * * @param filename the filename * @param includeSeparator true to include the end separator * @return the path */ private static String doGetFullPath(String filename, boolean includeSeparator) { if (filename == null) { return null; } int prefix = getPrefixLength(filename); if (prefix < 0) { return null; } if (prefix >= filename.length()) { if (includeSeparator) { return getPrefix(filename); // add end slash if necessary } else { return filename; } } int index = indexOfLastSeparator(filename); if (index < 0) { return filename.substring(0, prefix); } int end = index + (includeSeparator ? 1 : 0); return filename.substring(0, end); }
private String createKey(String name, Object version, String prefix) { String path = name.substring(FilenameUtils.getPrefix(name).length()); String baseName = FilenameUtils.getBaseName(name); String extension = FilenameUtils.getExtension(name); return String.format(Locale.ENGLISH, "%s/%s/%s-%s-%s%s", new Object[] { prefix, path, baseName, version, createTimestamp(), extension.length() > 0 ? "." + extension : "" }); }
return getPrefix(filename); // add end slash if necessary } else { return filename;
public Object getDisplayValue(File f) { if (f == USER_HOME) { return new ParamResourceModel("userHome", component).getString(); } else { GeoServerResourceLoader loader = GeoServerExtensions.bean(GeoServerResourceLoader.class); if (f.equals(loader.getBaseDirectory())) { return new ParamResourceModel("dataDirectory", component).getString(); } } try { final String displayName = FileSystemView.getFileSystemView().getSystemDisplayName(f); if (displayName != null && !displayName.trim().isEmpty()) { return displayName.trim(); } return FilenameUtils.getPrefix(f.getAbsolutePath()); } catch (Exception e) { LOGGER.log( Level.FINE, "Failed to get file display name, " + "on Windows this might be related to a known java bug http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6973685", e); // on windows we can get the occasional NPE due to // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6973685 } return f.getName(); }
return getPrefix(filename); // add end slash if necessary } else { return filename;
private RootsDropDownChoice(String id) { super(id); if (chRoot != null) { // allow only chRoot ArrayList<File> files = new ArrayList<>(1); File rootFile = new File(chRoot); files.add(rootFile); setChoices(files); setChoiceRenderer(new RootOnlyChoiceRenderer()); setDefaultModel(new Model<>(rootFile)); } else { // allow changing root List<File> roots = Arrays.asList(File.listRoots()); setChoices(roots); setVisible(!roots.isEmpty()); File defaultRoot = new File(FilenameUtils.getPrefix(getCurrentFolder())).getAbsoluteFile(); setDefaultModel(new Model<>(defaultRoot)); } add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override protected void onUpdate(AjaxRequestTarget target) { File root = getModelObject(); setCurrentFolder(root.getAbsolutePath()); FileBrowserPanel.this.setDefaultModelObject(root); target.add(FileBrowserPanel.this); } }); } }
return getPrefix(filename); // add end slash if necessary } else { return filename;
@Override public Object getDisplayValue(File f) { if (f == USER_HOME) { return new ParamResourceModel("userHome", DirectoryChooser.this).getString(); } else { GeoServerResourceLoader loader = GeoServerExtensions.bean(GeoServerResourceLoader.class); if (f.equals(loader.getBaseDirectory())) { return new ParamResourceModel("dataDirectory", DirectoryChooser.this) .getString(); } } try { final String displayName = FileSystemView.getFileSystemView().getSystemDisplayName(f); if (displayName != null && displayName.length() > 0) { return displayName; } return FilenameUtils.getPrefix(f.getAbsolutePath()); } catch (Exception e) { // on windows we can get the occasional NPE due to // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6973685 } return f.getName(); }
return getPrefix(filename); // add end slash if necessary } else { return filename;
/** * @param directory Parent directory * @return True if this is a child in the path hierarchy of the argument passed */ public boolean isChild(final Local directory) { if(this.isRoot()) { // Root cannot be a child of any other path return false; } if(Objects.equals(this.parent(this.getAbsolute()), this.parent(directory.getAbsolute()))) { // Cannot be a child if the same parent return false; } final String prefix = FilenameUtils.getPrefix(this.getAbsolute()); String parent = this.getAbsolute(); while(!parent.equals(prefix)) { parent = this.parent(parent); if(directory.getAbsolute().equals(parent)) { return true; } } return false; }
return getPrefix(filename); // add end slash if necessary } else { return filename;
return getPrefix(filename); // add end slash if necessary } else { return filename;