fix: fix bug of GenericArgumentContext that inflate ByRef, SZArray to Ptr.

before-split
walon 2025-05-22 19:44:13 +08:00
parent 09fdd3052d
commit bf38f43824
1 changed files with 6 additions and 10 deletions

View File

@ -41,9 +41,9 @@ namespace Obfuz.Utils
switch (typeSig.ElementType) switch (typeSig.ElementType)
{ {
case ElementType.Ptr: return new PtrSig(Resolve(typeSig.Next)); case ElementType.Ptr: return new PtrSig(Resolve(typeSig.Next));
case ElementType.ByRef: return new PtrSig(Resolve(typeSig.Next)); case ElementType.ByRef: return new ByRefSig(Resolve(typeSig.Next));
case ElementType.SZArray: return new PtrSig(Resolve(typeSig.Next)); case ElementType.SZArray: return new SZArraySig(Resolve(typeSig.Next));
case ElementType.Array: case ElementType.Array:
{ {
var ara = (ArraySig)typeSig; var ara = (ArraySig)typeSig;
@ -53,7 +53,7 @@ namespace Obfuz.Utils
case ElementType.Var: case ElementType.Var:
{ {
GenericVar genericVar = (GenericVar)typeSig; GenericVar genericVar = (GenericVar)typeSig;
var newSig = Resolve(typeArgsStack, genericVar.Number, true); var newSig = Resolve(typeArgsStack, genericVar.Number);
if (newSig == null) if (newSig == null)
{ {
throw new Exception(); throw new Exception();
@ -64,7 +64,7 @@ namespace Obfuz.Utils
case ElementType.MVar: case ElementType.MVar:
{ {
GenericMVar genericVar = (GenericMVar)typeSig; GenericMVar genericVar = (GenericMVar)typeSig;
var newSig = Resolve(methodArgsStack, genericVar.Number, true); var newSig = Resolve(methodArgsStack, genericVar.Number);
if (newSig == null) if (newSig == null)
{ {
throw new Exception(); throw new Exception();
@ -113,13 +113,9 @@ namespace Obfuz.Utils
} }
} }
private TypeSig Resolve(List<TypeSig> args, uint number, bool isTypeVar) private TypeSig Resolve(List<TypeSig> args, uint number)
{ {
var typeSig = args[(int)number]; return args[(int)number];
var gvar = typeSig as GenericSig;
if (gvar is null || gvar.IsTypeVar != isTypeVar)
return typeSig;
return gvar;
} }
} }