[Bug 63556] KATE: Crash when right clicking with large selection in H file

Jens Dagerbo jens.dagerbo at swipnet.se
Tue Sep 2 08:34:04 UTC 2003


Executive summary: CppSupport assumes that if a .cpp file exists in the 
CodeModel and there is a corresponding .h file (or vice versa, probably), 
the .h file must be in the CodeModel too. This isn't true, and the result is 
a crash.


> http://bugs.kde.org/show_bug.cgi?id=63556

OK... I'm not even completely sure that the crash I think I've identified is 
the crash reported, but it is similar. The reason I'm not simply fixing it is 
that I can't really say I understand the code.. :) Here goes...

To reproduce: 
Start Gideon, load a project, open a .cpp that is NOT part of the project (not 
part of the CodeModel). 

Rightclick the file in the editor -> CRASH

It appears that any file open in Gideon becomes part of the codemodel (even 
simple text files, I tried it with an INSTALL file). This doesn't go well 
with the piece of code that attempts to find the declarations matching the 
definitions of .h / .cpp files in CppSupportPart::contextMenu()


Simply changing parts/cppsupportpart/cppsupportpart.cpp: 464 (version 1.217) 
from

if ( !candidate.isEmpty() )

to

if ( !candidate.isEmpty() && codeModel()->hasFile( canidate ) )

stops it from crashing here.


However, and the reason I'm not simply committing, is this correct, or does it 
simply cover the real problem? In the time I spent looking at this I really 
didn't understand enough about the refcounted design to have any idea if it 
is correct or not. Debugging I ended up with confusing results like 
uninitialized QStrings if the process was allowed through CodeModel::
fileByName() without finding the file, something I wouldn't expect to happen. 
If the alternate return ( simply "FileDom()" ) is in any way "legal", it 
shouldn't blow up. Or? :)


jd







More information about the KDevelop-devel mailing list