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

Reply via email to