Posted 14 years ago
by Lee Grissom
-
Quest Software, Inc.
Version: 2.0.0109
Platform: .NET 3.5
Environment: Windows XP (32-bit)
We noticed a newly observed bug in our application. Essentially, our application is crashing with a unrecoverable Stackoverflow Exception. The call stack made me believe that it was a bug in DevExpress controls, but after opening a case with them, they are convinced that the true bug is in Actipro's code. They believe that what we're observing is merely a catalyst for a defect in the Actipro Docking code.
Here is the link to the full report (PLEASE read it, it's short):
http://www.devexpress.com/Support/Center/p/Q258344.aspx
Here is the call stack before things spin out of control (bottom is the entry point):To make this report easier to read, I've omitted the majority of the call stack, as it simply is just the same block of code repeating over and over,
from:
ActiproSoftware.UIStudio.Dock.DockManager.t()
to:
System.Windows.Forms.Control.OnResize()
Since the Actipro assemblies are obfuscated, and I don't have the source code to the Actipro Docking library, I can't perform a more in depth analysis on what might be causing the problem.
I suspect that the DockManager class isn't correctly protecting itself from Recursive calls to the "Resize" event. In other words, this could be a simple re-entrancy bug. What do you suggest for me to investigate further?
Here is the link to the full report (PLEASE read it, it's short):
http://www.devexpress.com/Support/Center/p/Q258344.aspx
Here is the call stack before things spin out of control (bottom is the entry point):
... this last block repeats over and over unknown number of times until this line here finally blows up with StackOverflow exception.
DevExpress.Utils.v9.3.dll!DevExpress.Skins.XtraForm.FormPainter.GetCaptionClient(System.Drawing.Rectangle captionBounds) Line 709 C#
DevExpress.Utils.v9.3.dll!DevExpress.Skins.XtraForm.FormPainter.CheckReady() Line 197 C#
DevExpress.Utils.v9.3.dll!DevExpress.Skins.XtraForm.FormPainter.Margins.get() Line 2009 C#
DevExpress.Utils.v9.3.dll!DevExpress.Skins.XtraForm.FormPainter.CalcSizeFromClientSize(System.Drawing.Size client) Line 153 + 0x14 bytes C#
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.SizeFromClientSize(System.Drawing.Size clientSize) Line 789 + 0x18 bytes C#
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.CreateHandle() Line 182 + 0x20 bytes C#
System.Windows.Forms.dll!System.Windows.Forms.Control.Handle.get() + 0x45 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.RectangleToScreen(System.Drawing.Rectangle r) + 0x45 bytes
ActiproSoftware.UIStudio.Dock.Net20.dll!ActiproSoftware.UIStudio.Dock.DockManager.a(bool A_0 = true) + 0x3d5 bytes
ActiproSoftware.UIStudio.Dock.Net20.dll!ActiproSoftware.UIStudio.Dock.DockManager.j() + 0x5e9 bytes
ActiproSoftware.UIStudio.Dock.Net20.dll!ActiproSoftware.UIStudio.Dock.DockManager.t(object A_0 = {Quest.Toad.Gui.MainForm}, System.EventArgs A_1 = {System.EventArgs}) + 0x24 bytes
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.Forms.dll!System.Windows.Forms.Control.OnResize(System.EventArgs e) + 0xbb bytes
System.Windows.Forms.dll!System.Windows.Forms.Form.OnResize(System.EventArgs e) + 0xd bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) + 0x29 bytes
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.OnSizeChanged(System.EventArgs e) Line 595 C#
System.Windows.Forms.dll!System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight) + 0x9c bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height) + 0x82 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Width | Height) + 0xd7 bytes
System.Windows.Forms.dll!System.Windows.Forms.Form.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) + 0x111 bytes
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) Line 722 C#
System.Windows.Forms.dll!System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) + 0x69 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.Size.set(System.Drawing.Size value) + 0x17 bytes
System.Windows.Forms.dll!System.Windows.Forms.Form.Size.set(System.Drawing.Size value) + 0xe bytes
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.CreateHandle() Line 182 + 0x30 bytes C#
System.Windows.Forms.dll!System.Windows.Forms.Control.Handle.get() + 0x45 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.RectangleToScreen(System.Drawing.Rectangle r) + 0x45 bytes
ActiproSoftware.UIStudio.Dock.Net20.dll!ActiproSoftware.UIStudio.Dock.DockManager.a(bool A_0 = true) + 0x3d5 bytes
ActiproSoftware.UIStudio.Dock.Net20.dll!ActiproSoftware.UIStudio.Dock.DockManager.j() + 0x5e9 bytes
ActiproSoftware.UIStudio.Dock.Net20.dll!ActiproSoftware.UIStudio.Dock.DockManager.t(object A_0 = {Quest.Toad.Gui.MainForm}, System.EventArgs A_1 = {System.EventArgs}) + 0x24 bytes
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.Forms.dll!System.Windows.Forms.Control.OnResize(System.EventArgs e) + 0xbb bytes
System.Windows.Forms.dll!System.Windows.Forms.Form.OnResize(System.EventArgs e) + 0xd bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.OnSizeChanged(System.EventArgs e = {System.EventArgs}) + 0x29 bytes
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.OnSizeChanged(System.EventArgs e) Line 595 C#
System.Windows.Forms.dll!System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height, int clientWidth, int clientHeight) + 0x9c bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.UpdateBounds(int x, int y, int width, int height) + 0x82 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified = Width | Height) + 0xd7 bytes
System.Windows.Forms.dll!System.Windows.Forms.Form.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) + 0x111 bytes
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.SetBoundsCore(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) Line 722 C#
System.Windows.Forms.dll!System.Windows.Forms.Control.SetBounds(int x, int y, int width, int height, System.Windows.Forms.BoundsSpecified specified) + 0x69 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.Size.set(System.Drawing.Size value) + 0x17 bytes
System.Windows.Forms.dll!System.Windows.Forms.Form.Size.set(System.Drawing.Size value) + 0xe bytes
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.CreateHandle() Line 182 + 0x30 bytes C#
System.Windows.Forms.dll!System.Windows.Forms.Control.RecreateHandleCore() + 0x156 bytes
System.Windows.Forms.dll!System.Windows.Forms.Form.RecreateHandleCore() + 0x195 bytes
System.Windows.Forms.dll!System.Windows.Forms.Control.RecreateHandle() + 0xb bytes
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.CheckUpdateSkinPainter() Line 137 + 0x8 bytes C#
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.OnLookAndFeelChangedCore() Line 488 C#
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.CheckForceLookAndFeelChangedCore() Line 65 + 0x7 bytes C#
DevExpress.Utils.v9.3.dll!DevExpress.XtraEditors.XtraForm.ResumeLayout(bool performLayout = true) Line 639 C#
DevExpress.Utils.v9.3.dll!DevExpress.LookAndFeel.Helpers.FormUserLookAndFeel.OnStyleChanged() Line 60 + 0x138 bytes C#
DevExpress.Utils.v9.3.dll!DevExpress.LookAndFeel.UserLookAndFeel.OnParentStyleChanged(object sender, System.EventArgs e) Line 158 C#
DevExpress.Utils.v9.3.dll!DevExpress.LookAndFeel.UserLookAndFeel.EventRecord<System.__Canon>.Invoke(DevExpress.LookAndFeel.UserLookAndFeel userLookAndFeel, System.EventArgs eventArgs) Line 534 C#
DevExpress.Utils.v9.3.dll!DevExpress.LookAndFeel.UserLookAndFeel.OnStyleChanged() Line 174 + 0xe bytes C#
DevExpress.Utils.v9.3.dll!DevExpress.LookAndFeel.UserLookAndFeelDefault.OnStyleChanged() Line 35 C#
DevExpress.Utils.v9.3.dll!DevExpress.LookAndFeel.UserLookAndFeel.Style.set(DevExpress.LookAndFeel.LookAndFeelStyle value) Line 472 + 0xf bytes C#
from:
ActiproSoftware.UIStudio.Dock.DockManager.t()
to:
System.Windows.Forms.Control.OnResize()
Since the Actipro assemblies are obfuscated, and I don't have the source code to the Actipro Docking library, I can't perform a more in depth analysis on what might be causing the problem.
I suspect that the DockManager class isn't correctly protecting itself from Recursive calls to the "Resize" event. In other words, this could be a simple re-entrancy bug. What do you suggest for me to investigate further?