Skip to content

Commit fccd9e2

Browse files
#3498: WholeProjectDecompiler.SanitizeFileName needs to be applied before the a full path is constructed.
1 parent b52544d commit fccd9e2

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

ILSpy/Commands/ExtractPackageEntryContextMenuEntry.cs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,22 @@ static string GetPackageFolderPath(SharpTreeNode node)
103103
return name;
104104
}
105105

106+
static string GetFileName(string path, bool isFile, SharpTreeNode containingNode, PackageEntry entry)
107+
{
108+
string fileName;
109+
if (isFile)
110+
{
111+
fileName = path;
112+
}
113+
else
114+
{
115+
string relativePackagePath = WholeProjectDecompiler.SanitizeFileName(Path.Combine(GetPackageFolderPath(containingNode), entry.Name));
116+
fileName = Path.Combine(path, relativePackagePath);
117+
}
118+
119+
return fileName;
120+
}
121+
106122
internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode> nodes, string path, bool isFile)
107123
{
108124
dockWorkspace.RunWithCancellation(ct => Task<AvalonEditTextOutput>.Factory.StartNew(() => {
@@ -112,12 +128,12 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
112128
{
113129
if (node is AssemblyTreeNode { PackageEntry: { } assembly })
114130
{
115-
string fileName = isFile ? path : Path.Combine(path, GetPackageFolderPath(node.Parent), assembly.Name);
131+
string fileName = GetFileName(path, isFile, node.Parent, assembly);
116132
SaveEntry(output, assembly, fileName);
117133
}
118134
else if (node is ResourceTreeNode { Resource: PackageEntry { } resource })
119135
{
120-
string fileName = isFile ? path : Path.Combine(path, GetPackageFolderPath(node.Parent), resource.Name);
136+
string fileName = GetFileName(path, isFile, node.Parent, resource);
121137
SaveEntry(output, resource, fileName);
122138
}
123139
else if (node is PackageFolderTreeNode)
@@ -127,17 +143,17 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
127143
{
128144
if (item is AssemblyTreeNode { PackageEntry: { } asm })
129145
{
130-
string fileName = Path.Combine(path, GetPackageFolderPath(item.Parent), asm.Name);
146+
string fileName = GetFileName(path, isFile, item.Parent, asm);
131147
SaveEntry(output, asm, fileName);
132148
}
133149
else if (item is ResourceTreeNode { Resource: PackageEntry { } entry })
134150
{
135-
string fileName = Path.Combine(path, GetPackageFolderPath(item.Parent), entry.Name);
151+
string fileName = GetFileName(path, isFile, item.Parent, entry);
136152
SaveEntry(output, entry, fileName);
137153
}
138154
else if (item is PackageFolderTreeNode)
139155
{
140-
Directory.CreateDirectory(Path.Combine(path, GetPackageFolderPath(item)));
156+
Directory.CreateDirectory(Path.Combine(path, WholeProjectDecompiler.SanitizeFileName(GetPackageFolderPath(item))));
141157
}
142158
}
143159
}
@@ -154,7 +170,6 @@ internal static void Save(DockWorkspace dockWorkspace, IEnumerable<SharpTreeNode
154170
static void SaveEntry(ITextOutput output, PackageEntry entry, string targetFileName)
155171
{
156172
output.Write(entry.Name + ": ");
157-
targetFileName = WholeProjectDecompiler.SanitizeFileName(targetFileName);
158173
using Stream stream = entry.TryOpenStream();
159174
if (stream == null)
160175
{

0 commit comments

Comments
 (0)