Stack Buffer Overrun in Qt [2 Qt Bugtests included]
Verfasst: 9. März 2009 17:57
Hi Leute,
das gleiche Problem, welches ich in meinem letzten Thread angesprochen habe, jedoch hat es einen anderen Ursprung. Es wird ein Problem sein, wo mir vielleicht nur eine Handvoll Leute eventuell weiterhelfen können, aber ich werde es versuchen.
Zuerst einmal die Meldung im Application Output vom QtCreator.
Das kommt immer am Anfang vom Start des Programmes, das aber schon seit immer und ich denke nicht, dass es im Zusammenhang steht.
Das kommt jedesmal beim crash. Der crash passiert nicht immer, das heißt manchmal geht es. Oftmals besonders wenn ich manche Zeilen auskommentiere, worauf ich gleich näher eingehe.
Es handelt sich um ein Model für QTreeView, sozusagen einem Erweiterten QDirModel. Ich hantiere somit viel mit den Klasen QDir, QFileInfo und QIcon. Die ich oft erstelle und zuweise etc. Meinen Tests nach muss es irgendwie damit Zusammenhängen, ich habe wirklich viel versucht und auch versucht genauso vorzugehen, wie bei QDirModel (welches keine Probleme aufwirft aber auch nicht den Umfang hat), aber ohne wirklichen Erfolg.
Ich denke dieser Auszug ist verständlich. Ihr kennt nicht jede Variable oder jede Struktur, aber es gibt einen Überblick über was ich tue und woran es liegen könnte. Komnmentiere ich die Zuweisung von QIcon aus, funktioniert es mehr, aber der Crash tritt trotzdem auf. Ich sitzte jetzt seit 3 Wochen vor dem Problem, setzte mich hin und wieder kurz drann, aber komme einfach hinter nichts.
Hoffentlich kennt jemand die tiefere Bedeutung von der "Fehlermeldung", hat selbst solche Erfahrungen gemacht oder sieht gar eine mögliche Fehlerquelle in dem Code.
Wenn jemand meint mir helfen zu können, wenn er das ganze Projekt bekommt und das auch tun möchte, so wäre ich eventuell dazu bereit. Dieses ganze Klassengeschiebe und Übergebe in Qt ist mir ein bisschen etwas neues, da ich in solchen Situationen, sonst immer zu Strukturen gegriffen habe und somit kein reiner OOP Programmierer bin *gg*
das gleiche Problem, welches ich in meinem letzten Thread angesprochen habe, jedoch hat es einen anderen Ursprung. Es wird ein Problem sein, wo mir vielleicht nur eine Handvoll Leute eventuell weiterhelfen können, aber ich werde es versuchen.
Zuerst einmal die Meldung im Application Output vom QtCreator.
Code: Alles auswählen
warning: Lowest section in C:\\WINDOWS\\system32\\xpsp2res.dll is .rsrc at 00011000
warning:
Code: Alles auswählen
*** A stack buffer overrun occurred in D:/Programmieren/qt/Archiver/debug/Archiver.exe :
warning: This is usually the result of a memory copy to a local buffer or structure where the size is not properly calculated/checked.
warning: If this bug ends up in the shipping product, it could be a severe security hole.
warning: The stack trace should show the guilty function (the function directly above __report_gsfailure).
warning: *** enter .exr 0022A3DC for the exception record
warning: *** then kb to get the faulting stack
Es handelt sich um ein Model für QTreeView, sozusagen einem Erweiterten QDirModel. Ich hantiere somit viel mit den Klasen QDir, QFileInfo und QIcon. Die ich oft erstelle und zuweise etc. Meinen Tests nach muss es irgendwie damit Zusammenhängen, ich habe wirklich viel versucht und auch versucht genauso vorzugehen, wie bei QDirModel (welches keine Probleme aufwirft aber auch nicht den Umfang hat), aber ohne wirklichen Erfolg.
Code: Alles auswählen
quint32 entryCount = infoList.count();
parent->children = QVector<DirModelEntry>(entryCount);
for (quint32 i = 0; i < entryCount; ++i) {
DirModelEntry &modelEntry = parent->children[i];
modelEntry.populated = false;
modelEntry.archiveEntry = 0;
modelEntry.parent = !isModelRoot ? parent : 0;
modelEntry.info = infoList.at(i);
if (!isSystemRoot) {
modelEntry.name = modelEntry.info.fileName();
} else {
modelEntry.name = modelEntry.info.filePath();
}
if (modelEntry.info.isDir()) {
modelEntry.kind = Dir;
} else if (isSupportedArchive(modelEntry.info.suffix())) {
modelEntry.kind = Archive;
} else {
modelEntry.kind = File;
}
modelEntry.size = modelEntry.info.size();
modelEntry.type = iconProvider->type(modelEntry.info);
modelEntry.modified = modelEntry.info.lastModified();
modelEntry.created = modelEntry.info.created();
modelEntry.accessed = modelEntry.info.lastRead();
modelEntry.attributes = getAttributes(modelEntry.info);
modelEntry.icon = iconProvider->icon(modelEntry.info);
}
Hoffentlich kennt jemand die tiefere Bedeutung von der "Fehlermeldung", hat selbst solche Erfahrungen gemacht oder sieht gar eine mögliche Fehlerquelle in dem Code.
Wenn jemand meint mir helfen zu können, wenn er das ganze Projekt bekommt und das auch tun möchte, so wäre ich eventuell dazu bereit. Dieses ganze Klassengeschiebe und Übergebe in Qt ist mir ein bisschen etwas neues, da ich in solchen Situationen, sonst immer zu Strukturen gegriffen habe und somit kein reiner OOP Programmierer bin *gg*