Preserve generic parameter count in obfuscated name

Fix #463
This commit is contained in:
yck1509 2016-03-27 16:16:49 +08:00
Родитель c890466c70
Коммит 6abd572859
1 изменённых файлов: 25 добавлений и 3 удалений

Просмотреть файл

@ -182,8 +182,30 @@ namespace Confuser.Renamer {
}
}
string ParseGenericName(string name, out int? count) {
if (name.LastIndexOf('`') != -1) {
int index = name.LastIndexOf('`');
int c;
if (int.TryParse(name.Substring(index + 1), out c)) {
count = c;
return name.Substring(0, index);
}
}
count = null;
return name;
}
string MakeGenericName(string name, int? count) {
if (count == null)
return name;
else
return string.Format("{0}`{1}", name, count.Value);
}
public string ObfuscateName(string name, RenameMode mode) {
string newName = null;
int? count;
name = ParseGenericName(name, out count);
if (string.IsNullOrEmpty(name))
return string.Empty;
@ -196,7 +218,7 @@ namespace Confuser.Renamer {
if (reversibleRenamer == null)
throw new ArgumentException("Password not provided for reversible renaming.");
newName = reversibleRenamer.Encrypt(name);
return newName;
return MakeGenericName(newName, count);
}
if (nameMap1.ContainsKey(name))
@ -205,7 +227,7 @@ namespace Confuser.Renamer {
byte[] hash = Utils.Xor(Utils.SHA1(Encoding.UTF8.GetBytes(name)), nameSeed);
for (int i = 0; i < 100; i++) {
newName = ObfuscateNameInternal(hash, mode);
if (!identifiers.Contains(newName))
if (!identifiers.Contains(MakeGenericName(newName, count)))
break;
hash = Utils.SHA1(hash);
}
@ -215,7 +237,7 @@ namespace Confuser.Renamer {
nameMap1[name] = newName;
}
return newName;
return MakeGenericName(newName, count);
}
public string RandomName() {