Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clipboard.Clear() crashes Outlook & Visual Studio

I have one of the weirdest bugs I have ever seen.

Take a look at this Windows Forms application created from scratch:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        System.Windows.Forms.Clipboard.Clear();
    }
}

Nothing fancy, just clearing the clipboard when the button is clicked.

Now, if I run this in Debug from Visual Studio, clear the clipboard a few times, then close the app, then attempt to close Visual Studio, Visual Studio crashes with a "Memory corruption" exception. This is not happening 100% of the time, but when it does, I cannot even start Visual Studio anymore, I have to reboot.

This seems to also affect Outlook. If I have Outlook opened, then start this app, clear the clipboard a few times, then switch back to Outlook, then Outlook also crashes, and just like Visual Studio, I have to reboot to be able to use it again.

So I am starting to be very suspicious of what the Windows Forms Clipboard class does in the Clear() method. To confirm my theory, I used the Clipboard class which comes with WPF. I referenced PresentationCore.dll in my WinForms application, and replaced:

System.Windows.Forms.Clipboard.Clear();

with

System.Windows.Clipboard.Clear();

And now neither Visual Studio nor Outlook crashes.

I googled this a bit, and found this post with no clear solution to the problem.

So I guess my question is, is this a real bug in the WinForms Clipboard class, or am I missing something?


Additional info:

  • Visual Studio 2012
  • Project running under .NET 4.0.
  • Outlook 2010

Outlook crash callstack :

Unhandled exception at 0x77a7e3be in OUTLOOK.EXE: 0xC0000005:
Access violation reading location 0x5c83d763.

ntdll.dll!@RtlpLowFragHeapFree@8()  + 0x2c bytes    
ntdll.dll!_RtlFreeHeap@12()  + 0x7e bytes   
kernel32.dll!_HeapFree@12()  + 0x14 bytes   
mshtml.dll!ParseExpandProperty()  + 0x2d6 bytes 
mshtml.dll!PROPERTYDESC::HandleStyleComponentProperty()  - 0xc2707 bytes    
mshtml.dll!MSCSSParser::SetStyleProperty()  + 0x268 bytes   
mshtml.dll!MSCSSParser::Declaration()  + 0x95 bytes 
mshtml.dll!MSCSSParser::Write()  + 0x8b0 bytes  
mshtml.dll!BaseCSSParser::LoadFromStream()  + 0x15a bytes   
mshtml.dll!CStyleSheet::DoParsing()  + 0x18b bytes  
mshtml.dll!CStyleElementHelper::OnDwnChan()  + 0x315 bytes  
mshtml.dll!CStyleElementHelper::SetCssCtx()  - 0x130a5f bytes   
mshtml.dll!CStyleElementHelper::EnsureStyleDownload()  + 0xfd bytes 
mshtml.dll!CStyleElementHelper::AttachExternalStyleSheet()  + 0x97 bytes    
mshtml.dll!CLinkElement::HandleLinkedObjects()  + 0xf0 bytes    
mshtml.dll!CLinkElement::Notify()  - 0x189c54 bytes 
mshtml.dll!CHtmRootParseCtx::FlushNotifications()  + 0x134 bytes    
mshtml.dll!CHtmRootParseCtx::Commit()  + 0xb bytes  
mshtml.dll!CHtmParse::Commit()  + 0x3c bytes    
mshtml.dll!CHtmPost::Broadcast()  + 0xf bytes   
mshtml.dll!CHtmPost::Exec()  + 0x11c bytes  
mshtml.dll!CHtmPost::Run()  + 0x40 bytes    
mshtml.dll!PostManExecute()  + 0x8e bytes   
mshtml.dll!PostManResume()  + 0x96 bytes    
mshtml.dll!CHtmPost::OnDwnChanCallback()  + 0x10 bytes  
mshtml.dll!CDwnChan::OnMethodCall()  + 0x1f bytes   
mshtml.dll!GlobalWndOnMethodCall()  + 0xf8 bytes    
mshtml.dll!GlobalWndProc()  + 0x4517a bytes 
like image 377
Yann Avatar asked Oct 01 '13 18:10

Yann


2 Answers

This is a known bug that causes memory corruption on 64 bits machines. It is fixed in Windows 8.

A workaround consists in doing

Clipboard.SetText("");
like image 196
Larry Avatar answered Oct 24 '22 02:10

Larry


in .Net 4.0 the code is not enough. an exception occurred.

Clipboard.SetText("");

use this code..

Clipboard.SetDataObject("", false);
like image 27
insung Avatar answered Oct 24 '22 01:10

insung