[Mono-bugs] [Bug 668506] New: Type.IsAssignableFrom can segfault with contravariant delegates
    bugzilla_noreply at novell.com 
    bugzilla_noreply at novell.com
       
    Mon Jan 31 22:59:48 EST 2011
    
    
  
https://bugzilla.novell.com/show_bug.cgi?id=668506
https://bugzilla.novell.com/show_bug.cgi?id=668506#c0
           Summary: Type.IsAssignableFrom can segfault with contravariant
                    delegates
    Classification: Mono
           Product: Mono: Runtime
           Version: SVN
          Platform: x86-64
        OS/Version: Linux
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: generics
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: knielsen at ariasolutions.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: Community User
           Blocker: ---
Description of Problem:
The mono runtime will segfault when calling Type.IsAssignableFrom with "this"
equal to a constructed contravariant generic delegate, and with "c" equal
to the generic type definition of the same delegate.
Steps to reproduce the problem:
1. run the following program:
using System;
using System.Reflection;
namespace MonoGenericsCrash
{
  static class IsAssignableFromTest
  {
    delegate void MyAction<in T>(T ag);
    public static void Main()
    {
      typeof(MyAction<string>).IsAssignableFrom(typeof(MyAction<>));
    }
  }
}
Actual Results: Program segfaults:
#6  mono_class_is_variant_compatible (klass="MyAction`1", oklass="MyAction`1")
at class.c:7206
#7  0x0000000000509633 in mono_class_is_assignable_from (klass="MyAction`1",
oklass="MyAction`1") at class.c:7293
#8  0x0000000041182410 in ?? ()
#9  0x00000000024c7780 in ?? ()
#10 0x00007f881a1b1d48 in ?? ()
#11 0x0000000000000000 in ?? ()
Expected Results: Program should not segfault
How often does this happen? always
Additional Information:
The problem appears to be in the mono_class_is_assignable_from method. Before
calling mono_class_is_variant_compatible with the two delegate types, it should
probably check to make sure both types have variant generic params, instead of
just the first type.
I will attach a patch that fixes this issue.
-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
    
    
More information about the mono-bugs
mailing list