Ctrl+S and Visual Studio Output Window

Paul Eremeev
Articles: 31

One of PVS-Studio users forwarded a bug report to us containing the following:

Exception message:
The system cannot find the file specified. 
Exception from HRESULT: 0x80070002)
EnvDTE.TextPoint get_StartPoint() at (0).
Void BuildEvents_OnBuildDone(EnvDTE.vsBuildScope,
at C:\Users\evg\Documents\SVN\CCnetBuild\
   Local PVS-Studio Setup\WorkDir\PVS-Studio\

The review of the code revealed that the crash occurs the moment we try to obtain the text from Visual Studio Output Window (it happens just after the build is done and before incremental analysis is launched, so we can be assured that there are no linking errors present). But at the same time the pointer to the output window itself was correctly obtained, the error revealed itself in the fragment which is used to get the pointer for the first character of this text.

In the situation described the error message "The system cannot find the file specified" itself looks quite odd, as neither we, nor the Output Window itself, are in any ways interact or associate with any files, and all the operations with this window a carried out using Visual Studio API from within seemingly safe C# code. And indeed the stack indicates that the exception is generated inside unmanaged Visual Studio interiors. And of course this bug had not repeated itself nor had it been caught by any of our internal tests.

Summing up all of aforesaid, it becomes clear that to replicate this error we have to determine the relationship between Output Window and some external file, if any. After several hours of digging in Visual Studio settings while trying to disable the saving of build logs to html, disable this output window altogether or to find the connection between output text and system temp files (not a thing from this list was able to replicate this bug, on the contrary our code operated flawlessly), by accident one of not so well known Output Window features had been discovered: the ability to save outputted text into the file with Ctrl+S. It should be noted however that this action is in not synchronizing the output with this file, but simply stores the entire output into it without updating it afterwards. Neither the less by exactly this action we were able to replicate the exception of our interest.

Thereby we can clearly see the bug in the Visual Studio API extensibility model — the single saving of the output into a file leads to the inoperability of methods intended for interaction with Output Window. PVS-Studio 3.45 will include a workaround for such situations.

Use PVS-Studio to search for bugs in C, C++, C# and Java code

We offer you to check your project code with PVS-Studio. Just one bug found in the project will show you the benefits of the static code analysis methodology better than a dozen of the articles.

goto PVS-Studio;

Paul Eremeev
Articles: 31

Bugs Found

Checked Projects
Collected Errors
12 668