| Summary: | Background parser crashed (nullptr deref in Cpp::ADLTypeVisitor::endVisit) | ||
|---|---|---|---|
| Product: | [Applications] kdevelop | Reporter: | Bastian <bastian.leyer> |
| Component: | Language Support: CPP (old) | Assignee: | kdevelop-bugs-null |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | VHI | ||
| Version First Reported In: | 4.2.60 | ||
| Target Milestone: | 4.2.0 | ||
| Platform: | Compiled Sources | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: |
kcrash log
sources which crashes kdevelop + cli output |
||
definitely a nullptr deref in Cpp::ADLTypeVisitor::endVisit - can you provide us with the project that triggers the crash? Or at least try this: kdebugdialog -> enable cpp and language areas of kdevelop/kdevplatform. Then trigger the bug again, take a look at the cli output. If you have threads = 1 the last message about which file it parses should tell us the culprit. Try opening that in a plain kdev session. If that also triggers the bug, please attach that file and/or try to remove code until you find a snippet that is as short as possible to trigger the bug. Created attachment 59157 [details]
sources which crashes kdevelop + cli output
this zip archive contains five small sources and the cli output.
kdevelop crashed every time I opened this sources.
steps to reproduce the crash:
- remove ~/.kdevduchain
- remove all .kdev_include_paths files
- activate background parsing (1 thread)
- open all sources
these steps are enough to crash kdevelop every time.
After executing KDevelop with KDevelop, the background parser crashs always in file declaration.cpp:340. The macro ENSURE_CAN_READ is the point of failure. Please ignore my previous comment. the nullptr is in
kdevelop/languages/cpp/cppduchain/adlhelper.cpp in function ADLTypeVisitor::endVisit(const FunctionType * /*type*/)
the problematic code is the missing nullptr check in line 119:
118: while (context) {
119: Declaration* decl = context->owner();
120: if (context->type() == DUContext::Namespace) {
121: m_helper.addAssociatedNamespace(decl->qualifiedIdentifier());
122: break;
123: } else if (context->type() == DUContext::Class) {
124: m_helper.addAssociatedClass(decl);
125: break;
126: }
127: context = context->parentContext();
128: }
in my projects the "decl" pointer is extremly often null, so KDevelop isn's usable for me. i don't know exactly what this code does, but if I "fix" the nullptr deref like this
118: while (context) {
119: Declaration* decl = context->owner();
120: if(decl != 0) {
121: if (context->type() == DUContext::Namespace) {
122: m_helper.addAssociatedNamespace(decl->qualifiedIdentifier());
123: break;
124: } else if (context->type() == DUContext::Class) {
125: m_helper.addAssociatedClass(decl);
126: break;
127: }
128: }
129: context = context->parentContext();
130: }
everything works fine again.
I hope this infos are usable for you.
Bastian
Git commit 8cbf328a504b016592043d23f867684cd4b0d62b by Milian Wolff. Committed on 29/04/2011 at 20:59. Pushed by mwolff into branch '4.2'. fix crash in ADL helper BUG: 271336 M +9 -8 languages/cpp/cppduchain/adlhelper.cpp http://commits.kde.org/kdevelop/8cbf328a504b016592043d23f867684cd4b0d62b Moving all the bugs from the CPP Parser. It was not well defined the difference between it and C++ Language Support and people kept reporting in both places indistinctively |
Created attachment 59149 [details] kcrash log Version: 4.2.60 (using KDE 4.6.2) OS: Linux if i open a project the background parser crashed. this happens always. the only way to work with kdevelop is to disable the background parser. i reduce the number of threads from 6 to 1 but this has no effect. Reproducible: Always