Hi JB,
i guess i've found a little bug in Cecil.
When importing a MethodRef from a non signed Assembly, a null pointer
exception is thrown in Import::ImportAssemblyName
(AssemblyNameReference)
here is the original code :
AssemblyNameReference ImportAssemblyName(AssemblyNameReference name)
{
AssemblyNameReference reference;
if (TryGetAssemblyNameReference(name, out reference))
return reference;
reference = new AssemblyNameReference(name.Name,
name.Version)
{
Culture = name.Culture,
HashAlgorithm = name.HashAlgorithm,
};
var pk_token = new byte[name.PublicKeyToken.Length];
if (pk_token.Length > 0)
Buffer.BlockCopy(name.PublicKeyToken, 0, pk_token, 0,
pk_token.Length);
reference.PublicKeyToken = pk_token;
module.AssemblyReferences.Add(reference);
return reference;
}
and here is a little patch that work for me :
AssemblyNameReference ImportAssemblyName(AssemblyNameReference name)
{
AssemblyNameReference reference;
if (TryGetAssemblyNameReference(name, out reference))
return reference;
reference = new AssemblyNameReference(name.Name,
name.Version)
{
Culture = name.Culture,
HashAlgorithm = name.HashAlgorithm,
};
var pk_token = default(byte[]);
if (name.PublicKeyToken != null)
{
pk_token = new byte[name.PublicKeyToken.Length];
if (pk_token.Length > 0)
Buffer.BlockCopy(name.PublicKeyToken, 0, pk_token,
0, pk_token.Length);
}
reference.PublicKeyToken = pk_token;
module.AssemblyReferences.Add(reference);
return reference;
}
By the way, i was wondering if it wouldn't be great if all used
References (MethodRef, TypeRef etc..) used during IL Emit would be
"auto" imported in the current Module?
Fabrice.
--
--
mono-cecil
Subscription settings: http://groups.google.com/group/mono-cecil/subscribe?hl=en