Author: taylor
Date: Fri Jan 15 01:13:20 2016
New Revision: 1724717

URL: http://svn.apache.org/viewvc?rev=1724717&view=rev
Log:
denying all non-relative zip file paths during Site Manager import

Modified:
    
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java

Modified: 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java?rev=1724717&r1=1724716&r2=1724717&view=diff
==============================================================================
--- 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java
 (original)
+++ 
portals/jetspeed-2/applications/j2-admin/trunk/src/main/java/org/apache/jetspeed/portlets/site/PortalSiteManager.java
 Fri Jan 15 01:13:20 2016
@@ -1437,15 +1437,17 @@ public class PortalSiteManager extends A
                                         success = true;
                                     } else if 
(fileType.equalsIgnoreCase("zip"))
                                     {
-                                        unzipfile(fileName, 
StringUtils.removeEnd(usrFolder, pathSeparator), pathSeparator);
-                                        folder = getServiceLocator()
-                                                .getCastorPageManager()
-                                                .getFolder(userName);
-                                        importFolders(
-                                                pageManager,
-                                                getServiceLocator()
-                                                        
.getCastorPageManager(),
-                                                folder, userName, destPath, 
copyIds);
+                                        int count = unzipfile(fileName, 
StringUtils.removeEnd(usrFolder, pathSeparator), pathSeparator);
+                                        if (count > 0) {
+                                            folder = getServiceLocator()
+                                                    .getCastorPageManager()
+                                                    .getFolder(userName);
+                                            importFolders(
+                                                    pageManager,
+                                                    getServiceLocator()
+                                                            
.getCastorPageManager(),
+                                                    folder, userName, 
destPath, copyIds);
+                                        }
                                         success = true;
                                     }
                                 }
@@ -3738,12 +3740,12 @@ public class PortalSiteManager extends A
         out.close();
     }
 
-    private boolean unzipfile(String file, String destination, String 
sepreator)
+    private int unzipfile(String file, String destination, String sepreator)
     {
         Enumeration entries;
         String filePath = "";
         ZipFile zipFile = null;
-        
+        int count = 0;
         try
         {
             zipFile = new ZipFile(destination + sepreator + file);
@@ -3751,6 +3753,10 @@ public class PortalSiteManager extends A
             while (entries.hasMoreElements())
             {
                 ZipEntry entry = (ZipEntry) entries.nextElement();
+                if (entry.getName().indexOf("..") > -1 || 
entry.getName().startsWith("/")) {
+                    log.error("Zip Entry has invalid path: " + entry.getName() 
);
+                    continue;
+                }
                 filePath = destination + sepreator + entry.getName();
                 createPath(filePath);
                 
@@ -3762,6 +3768,7 @@ public class PortalSiteManager extends A
                     input = zipFile.getInputStream(entry);
                     output = new FileOutputStream(filePath);
                     IOUtils.copy(input, output);
+                    count++;
                 }
                 finally
                 {
@@ -3769,12 +3776,10 @@ public class PortalSiteManager extends A
                     IOUtils.closeQuietly(input);
                 }
             }
-            return true;
         }
         catch (IOException ioe)
         {
             log.error("Unexpected IO exception.", ioe);
-            return false;
         }
         finally
         {
@@ -3789,6 +3794,7 @@ public class PortalSiteManager extends A
                 }
             }
         }
+        return count;
     }
 
     private void createPath(String filePath)



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org

Reply via email to