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 [EMAIL PROTECTED]

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

--- shadow/78721        2006-06-28 12:04:27.000000000 -0400
+++ shadow/78721.tmp.23952      2006-06-28 12:04:27.000000000 -0400
@@ -0,0 +1,109 @@
+Bug#: 78721
+Product: Mono: Runtime
+Version: 1.0
+OS: 
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Normal
+Component: interop
+AssignedTo: [EMAIL PROTECTED]                            
+ReportedBy: [EMAIL PROTECTED]               
+QAContact: [EMAIL PROTECTED]
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: marshaling bug with LOGFONT (mono_marshal_free_asany)
+
+Description of Problem:
+When freeing a LOGFONT mono_marshal_free_asany allocates a new string (not
+sure why) which can be invalid (and get trapped by valgrind).
+
+Steps to reproduce the problem:
+1. Compile this
+
+using System;
+using System.Drawing;
+using System.Runtime.InteropServices;
+
+[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
+class LOGFONT {
+       public int lfHeight;
+       public int lfWidth;
+       public int lfEscapement;
+       public int lfOrientation;
+       public int lfWeight;
+       public byte lfItalic;
+       public byte lfUnderline;
+       public byte lfStrikeOut;
+       public byte lfCharSet;
+       public byte lfOutPrecision;
+       public byte lfClipPrecision;
+       public byte lfQuality;
+       public byte lfPitchAndFamily;
+       [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)]
+       public string lfFaceName;
+}
+
+class Program {
+
+       static void Main (string[] args)
+       {
+               Font f = new Font ("Arial", 12.5f);
+               if (args.Length > 0)
+                       f.Dispose ();
+               LOGFONT lf = new LOGFONT();
+               f.ToLogFont (lf);
+       }
+}
+
+2. and execute it under valgrind
+
+
+Actual Results (with some debug display)
+
[EMAIL PROTECTED]:~/src> mcs logfont.cs -r:System.Drawing.dll
[EMAIL PROTECTED]:~/src> mono logfont.exe
+
+** (logfont.exe:5519): WARNING **: GdipGetLogFontA font 0x82457f8 graphics
+0x82484e0 lf 0x82454b8
+
+** (logfont.exe:5519): WARNING **: not blittable
+
+** (logfont.exe:5519): WARNING **: mono_string_new: 'Arial' (len 5)
[EMAIL PROTECTED]:~/src> mono logfont.exe 1
+
+** (logfont.exe:5525): WARNING **: GdipGetLogFontA font (nil) graphics
+0x8248df0 lf 0x8245480
+
+** (logfont.exe:5525): WARNING **: not blittable
+
+** (logfont.exe:5525): WARNING **: mono_string_new:
+'\x84\x9c%\u0008̢%\u0008\u000c\xa5%\u0008   *' (len 14)
+
+Unhandled Exception: System.ArgumentException: Invalid Parameter. A null
+reference or invalid value was found.
+  at System.Drawing.GDIPlus.CheckStatus (Status status) [0x00000]
+  at System.Drawing.Font.ToLogFont (System.Object logFont,
+System.Drawing.Graphics graphics) [0x00000]
+  at System.Drawing.Font.ToLogFont (System.Object logFont) [0x00000]
+  at (wrapper remoting-invoke-with-check) System.Drawing.Font:ToLogFont
+(object)
+  at Program.Main (System.String[] args) [0x00000]
+
+
+Expected Results:
+No error in valgrind.
+
+How often does this happen? 
+When LOGFONT is marshaled in the GdipGetLogFont[A|W] calls - without being
+initialized.
+
+
+Additional Information:
+* When the font is disposed GdipGetLogFontA return an error which is turned
+into an exception in System.Drawing.
+* If I zeroize the string (in GdipGetLogFontA) then the error doesn't
+occurs. However I don't think this should be required (at least not in
+libgdiplus).
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to