File tree Expand file tree Collapse file tree 1 file changed +24
-2
lines changed
lib/internal/Magento/Framework/Archive Expand file tree Collapse file tree 1 file changed +24
-2
lines changed Original file line number Diff line number Diff line change @@ -53,8 +53,9 @@ public function unpack($source, $destination)
53
53
{
54
54
$ zip = new \ZipArchive ();
55
55
if ($ zip ->open ($ source ) === true ) {
56
- $ zip ->renameIndex (0 , basename ($ destination ));
57
- $ filename = $ zip ->getNameIndex (0 ) ?: '' ;
56
+ $ baseName = basename ($ destination );
57
+ $ filename = $ this ->getFilenameFromZip ($ zip , $ baseName );
58
+
58
59
if ($ filename ) {
59
60
$ zip ->extractTo (dirname ($ destination ), $ filename );
60
61
} else {
@@ -67,4 +68,25 @@ public function unpack($source, $destination)
67
68
68
69
return $ destination ;
69
70
}
71
+
72
+ /**
73
+ * Retrieve filename for import from zip archive.
74
+ *
75
+ * @param \ZipArchive $zip
76
+ * @param string $baseName
77
+ *
78
+ * @return string
79
+ */
80
+ private function getFilenameFromZip (\ZipArchive $ zip , string $ baseName ): string
81
+ {
82
+ $ index = 0 ;
83
+
84
+ do {
85
+ $ zip ->renameIndex ($ index , $ baseName );
86
+ $ filename = $ zip ->getNameIndex ($ index );
87
+ $ index ++;
88
+ } while ($ baseName !== $ filename && $ filename !== false );
89
+
90
+ return $ filename === $ baseName ? $ filename : '' ;
91
+ }
70
92
}
You can’t perform that action at this time.
0 commit comments