[Mono-bugs] [Bug 77494][Min] Changed - Mono runtime after 1.1.8.x goes into infinite recursion when accessing virtual override property.

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Tue Feb 7 20:22:22 EST 2006


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by miguel at ximian.com.

http://bugzilla.ximian.com/show_bug.cgi?id=77494

--- shadow/77494	2006-02-07 18:40:24.000000000 -0500
+++ shadow/77494.tmp.2824	2006-02-07 20:22:22.000000000 -0500
@@ -1,15 +1,15 @@
 Bug#: 77494
 Product: Mono: Runtime
 Version: 1.1
 OS: Mandrake 9.0
 OS Details: x86, glibc 2.2.5
-Status: NEW   
+Status: NEEDINFO   
 Resolution: 
 Severity: Unknown
-Priority: Major
+Priority: Minor
 Component: JIT
 AssignedTo: lupus at ximian.com                            
 ReportedBy: mwickline at maad.com               
 QAContact: mono-bugs at ximian.com
 TargetMilestone: ---
 URL: 
@@ -210,6 +210,150 @@
 		}
 	}
 
 ------- Additional Comments From miguel at ximian.com  2006-02-07 18:40 -------
 I am unable to reproduce this failure.
 
+
+------- Additional Comments From miguel at ximian.com  2006-02-07 20:22 -------
+I also obtained the code for this one directly.
+
+The code sample that is producing the problem in your code is this
+line in method get_StartID of class IPMEPreferences:
+
+         IL_0001:  call instance string class
+[MAAD.Simulator]MAAD.Simulator.Utilities.IPreferences::get_StartID()
+
+While both MCS and CSC produce this code for the sample you pasted above:
+
+        IL_0001:  call instance string class
+DefaultPreferences::get_StartID()
+
+I suspect that the source code on your system does something along the
+lines of:
+
+      ((Preferences) this).StartID)
+
+I am afraid you posted the sample code after having fixed it locally
+(as discussed on the email).
+
+Here is my current test case:
+
+using System;
+using System.Xml;
+using System.Xml.Serialization;
+using System.ComponentModel;
+
+	[ Serializable(),
+	  XmlRoot("IPMEPreferences")
+	]
+	public class IPMEPreferences : Preferences
+	{
+
+		[ XmlAttribute() ]
+		public override string StartID
+		{
+			get
+			{
+				if(base.StartID != null && IDDelimiter != null)
+					return base.StartID.Replace(IDDelimiter, "_");
+				return base.StartID;
+			}
+			set
+			{
+				// NOTE:  IDDelimiter may be undefined here during the XML
+deserialization,
+				// so we have to do the replacement in the getter.
+				base.StartID = value;
+			}
+		}
+	}
+
+
+interface IPreferences {
+	string StartID { get; set; }
+}
+
+	[
+	Serializable()
+	]
+	public class Preferences : DefaultPreferences, IPreferences
+	{
+		private string idDelimiter;
+
+		public Preferences()
+		{
+			IDDelimiter = "_";
+		}
+
+		[
+		Browsable(false),
+		XmlAttribute()
+		]
+		public virtual string IDDelimiter
+		{
+			get { return idDelimiter; }
+			set
+			{
+				OldValue = IDDelimiter;
+				idDelimiter = value;
+			}
+		}
+
+	}
+
+	[Serializable()]
+	public class DefaultPreferences : DefaultEditable
+	{
+		private string startID;
+		public DefaultPreferences()
+		{
+			StartID = "1";
+		}
+
+		[
+		XmlAttribute(),
+		Description("The ID of the start task in the network.")
+		]
+		public virtual string StartID
+		{
+			get { return startID; }
+			set
+			{
+				OldValue = StartID;
+				startID = value;
+			}
+		}
+	}
+
+	[Serializable()]
+	public abstract class DefaultEditable 
+	{
+		[NonSerialized()] private object oldValue;
+		public DefaultEditable()
+		{
+			OldValue = null;
+		}
+
+		[
+		Browsable(false),
+		XmlIgnore(),
+		]
+		protected object OldValue
+		{
+			get { return oldValue; }
+			set { oldValue = value; }
+		}
+	}
+
+
+
+class D {
+	static void Main ()
+	{
+		new IPMEPreferences ();
+	}
+}
+
+Your code runs on .NET, but does fail in Mono as you described.   It
+would help to track down the bug to get the original classes involved
+in this problem. 


More information about the mono-bugs mailing list