Found that TVar default constructor (the one with NO arguments) does NOT initialise the `parent` member to a null pointer. Subsequently in the auto load case (but not the normal profile loading case apparently) the first time that (QStringList)VarUnit::shortVarName(TVar * var) is called the call to:
var->getParent() {noted above as the line before the crash was happening} was returning a garbage (but not NULL) pointer that when used in p->getName() != "_G" was the cause of the Segment Violation crash. I am just writing code to initialise ALL the members of the TVar class for ALL the constructors (some members are not initialised in ANY of them). Will post the Pull Requests here that apply the fix shortly. ** Changed in: mudlet Assignee: (unassigned) => Stephen Lyons (slysven) ** Changed in: mudlet Status: New => In Progress -- You received this bug notification because you are a member of Mudlet Makers, which is subscribed to Mudlet. https://bugs.launchpad.net/bugs/1624720 Title: Crash on first use of TVar::getName() during autologin Status in Mudlet: In Progress Bug description: Whilst working on the development branch I decided to enable the autologin (check box on "connection preferences" dialog) and found that it seg. faults consistently on the first use of TVar::getName() whilst loading in the selected profile. I rechecked on the release_30 (post-"delta") preview and got precisely the same behaviour at the same point, for the latter the top end of the stack trace was: 1 QString::QString qstring.h 898 0x467a1a 2 TVar::getName TVar.cpp 68 0x74784d 3 VarUnit::shortVarName VarUnit.cpp 153 0x74974a 4 VarUnit::addSavedVar VarUnit.cpp 189 0x749d1d 5 XMLimport::readVariableGroup XMLimport.cpp 240 0x7579a6 6 XMLimport::readVariablePackage XMLimport.cpp 293 0x757e3c 7 XMLimport::readPackage XMLimport.cpp 588 0x759b72 8 XMLimport::importPackage XMLimport.cpp 146 0x756f84 9 mudlet::doAutoLogin mudlet.cpp 2152 0x5fabd1 10 mudlet::startAutoLogin mudlet.cpp 2119 0x5fa57d 11 mudlet::qt_static_metacall moc_mudlet.cpp 300 0x76e4d3 ... <More> At 3 we have: QStringList VarUnit::shortVarName(TVar * var){ QStringList names; if (!var || var->getName() == "_G"){ names << ""; return names; } names << var->getName(); TVar * p = var->getParent(); ==> while (p && p->getName() != "_G"){ <== Where crash is happening names.insert(0,p->getName()); p = p->getParent(); } return names; } and looking in the debugger p, although non-zero {and thus passing the first test in the while(...)} it is NOT a valid entity, i.e. the preceding var->getParent() is NOT producing a valid value. As this is a regression (it disables autologin) it must be rated at least a "High" priority item only the fact that the ability to start a profile automatically is a useful rather than an essential feature stops this being a "Critical" - as well as indicating how many users (none at all) seem to be using it for the latest code versions. I will investigate further and try and triage what introduced it, but I expect some re-factoring has eliminated some initialization step that is needed when auto-login is used but is not encountered otherwise...! To manage notifications about this bug go to: https://bugs.launchpad.net/mudlet/+bug/1624720/+subscriptions _______________________________________________ Mailing list: https://launchpad.net/~mudlet-makers Post to : mudlet-makers@lists.launchpad.net Unsubscribe : https://launchpad.net/~mudlet-makers More help : https://help.launchpad.net/ListHelp