Bug 436510 - Artikulate crashes while trying to download courses for first time
Summary: Artikulate crashes while trying to download courses for first time
Status: RESOLVED FIXED
Alias: None
Product: Artikulate
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Ubuntu Linux
: NOR crash
Target Milestone: ---
Assignee: Andreas Cord-Landwehr
URL:
Keywords: drkonqi
: 420730 (view as bug list)
Depends on:
Blocks:
 
Reported: 2021-05-03 04:20 UTC by Rahul Chowdhury
Modified: 2021-05-15 13:16 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rahul Chowdhury 2021-05-03 04:20:24 UTC
Application: artikulate (1.0.0)

Qt Version: 5.15.2
Frameworks Version: 5.80.0
Operating System: Linux 5.11.0-16-generic x86_64
Windowing System: X11
Drkonqi Version: 5.21.4
Distribution: Ubuntu 21.04

-- Information about the crash:
- What I was doing when the application crashed:
Launched artikulate and clicked on download for all the 4 available courses.

- Unusual behavior I noticed:
Crashed while trying to download them.

- Custom settings of the application: None

The reporter is unsure if this crash is reproducible.

-- Backtrace:
Application: Artikulate (artikulate), signal: Segmentation fault

[KCrash Handler]
#4  std::__atomic_base<int>::operator++() (this=<optimized out>) at /usr/include/c++/10/bits/atomic_base.h:325
#5  QAtomicOps<int>::ref<int>(std::atomic<int>&) (_q_value=<optimized out>) at ../../include/QtCore/../../src/corelib/thread/qatomic_cxx11.h:283
#6  QBasicAtomicInteger<int>::ref() (this=<optimized out>) at ../../include/QtCore/../../src/corelib/thread/qbasicatomic.h:118
#7  QObjectPrivate::Connection::ref() (this=<optimized out>) at kernel/qobject_p.h:177
#8  QMetaObject::Connection::operator=(QMetaObject::Connection const&) (this=this@entry=0x562a251ff6a8, other=...) at kernel/qobject.cpp:5272
#9  0x00007f4c554e3fbb in QVector<QMetaObject::Connection>::insert(QMetaObject::Connection*, int, QMetaObject::Connection const&) (t=..., n=1, before=<optimized out>, this=0x562a24cf0c18) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qvector.h:855
#10 QVector<QMetaObject::Connection>::insert(int, QMetaObject::Connection const&) (this=this@entry=0x562a24cf0c18, i=i@entry=-1, t=...) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qvector.h:467
#11 0x00007f4c554e2daa in CourseModel::onCourseAboutToBeAdded(std::shared_ptr<ICourse>, int) (this=0x562a24cf0c00, course=std::shared_ptr<class ICourse> (use count 822085440, weak count 113352) = {...}, row=-1) at ./src/models/coursemodel.cpp:137
#12 0x00007f4c554e3a00 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<std::shared_ptr<ICourse>, int>, void, void (CourseModel::*)(std::shared_ptr<ICourse>, int)>::call(void (CourseModel::*)(std::shared_ptr<ICourse>, int), CourseModel*, void**) (arg=<optimized out>, o=<optimized out>, f=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
#13 QtPrivate::FunctionPointer<void (CourseModel::*)(std::shared_ptr<ICourse>, int)>::call<QtPrivate::List<std::shared_ptr<ICourse>, int>, void>(void (CourseModel::*)(std::shared_ptr<ICourse>, int), CourseModel*, void**) (arg=<optimized out>, o=<optimized out>, f=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
#14 QtPrivate::QSlotObject<void (CourseModel::*)(std::shared_ptr<ICourse>, int), QtPrivate::List<std::shared_ptr<ICourse>, int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
#15 0x00007f4c53e88b0e in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fffb4b72ea0, r=0x562a24cf0c00, this=0x562a24cf02f0) at ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
#16 doActivate<false>(QObject*, int, void**) (sender=0x7fffb4b7c5d0, signal_index=3, argv=argv@entry=0x7fffb4b72ea0) at kernel/qobject.cpp:3886
#17 0x00007f4c53e81cb8 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=sender@entry=0x7fffb4b7c5d0, m=m@entry=0x7f4c555125c0 <IResourceRepository::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7fffb4b72ea0) at kernel/qobject.cpp:3946
#18 0x00007f4c554a3507 in IResourceRepository::courseAboutToBeAdded(std::shared_ptr<ICourse>, int) (this=this@entry=0x7fffb4b7c5d0, _t1=std::shared_ptr<class ICourse> (use count 4, weak count 1) = {...}, _t2=<optimized out>) at ./obj-x86_64-linux-gnu/src/artikulatecore_autogen/TAC5DWH4SE/moc_iresourcerepository.cpp:167
#19 0x00007f4c554bc122 in ResourceRepository::loadCourse(QString const&) (this=this@entry=0x7fffb4b7c5d0, resourceFile=...) at ./src/core/resourcerepository.cpp:125
#20 0x00007f4c554bc83a in operator() (dir=..., __closure=0x7fffb4b73030) at ./src/core/resourcerepository.cpp:97
#21 std::__invoke_impl<void, ResourceRepository::reloadCourses()::<lambda(QDir)>&, QDir> (__f=...) at /usr/include/c++/10/bits/invoke.h:60
#22 std::__invoke_r<void, ResourceRepository::reloadCourses()::<lambda(QDir)>&, QDir> (__fn=...) at /usr/include/c++/10/bits/invoke.h:153
#23 std::_Function_handler<void(QDir), ResourceRepository::reloadCourses()::<lambda(QDir)> >::_M_invoke(const std::_Any_data &, QDir &&) (__functor=..., __args#0=<optimized out>) at /usr/include/c++/10/bits/std_function.h:291
#24 0x00007f4c554bbb16 in std::function<void (QDir)>::operator()(QDir) const (__args#0=..., this=0x7fffb4b73030) at /usr/include/c++/10/bits/std_function.h:622
#25 ResourceRepository::reloadCourses() (this=<optimized out>) at ./src/core/resourcerepository.cpp:106
#26 0x00007f4c53e88b44 in doActivate<false>(QObject*, int, void**) (sender=0x562a24947e20, signal_index=59, argv=argv@entry=0x7fffb4b73420) at kernel/qobject.cpp:3898
#27 0x00007f4c53e81ef1 in QMetaObject::activate(QObject*, int, int, void**) (sender=<optimized out>, signalOffset=<optimized out>, local_signal_index=<optimized out>, argv=argv@entry=0x7fffb4b73420) at kernel/qobject.cpp:3959
#28 0x00007f4c55235129 in QQmlVMEMetaObject::activate(QObject*, int, void**) (this=this@entry=0x562a249b47f0, object=<optimized out>, index=index@entry=102, args=args@entry=0x7fffb4b73420) at qml/qqmlvmemetaobject.cpp:1312
#29 0x00007f4c552378e0 in QQmlVMEMetaObject::metaCall(QObject*, QMetaObject::Call, int, void**) (this=0x562a249b47f0, o=<optimized out>, c=QMetaObject::InvokeMetaMethod, _id=102, a=0x7fffb4b73420) at qml/qqmlvmemetaobject.cpp:969
#30 0x00007f4c5528a0e5 in QQmlObjectOrGadget::metacall(QMetaObject::Call, int, void**) const (this=this@entry=0x7fffb4b73660, type=type@entry=QMetaObject::InvokeMetaMethod, index=<optimized out>, argv=argv@entry=0x7fffb4b73420) at qml/qqmlobjectorgadget.cpp:51
#31 0x00007f4c5516fb4e in CallMethod (callType=QMetaObject::InvokeMetaMethod, callArgs=0x7f4c473c0670, engine=0x562a2444ed90, argTypes=0x0, argCount=0, returnType=43, index=<optimized out>, object=...) at jsruntime/qv4qobjectwrapper.cpp:1319
#32 CallPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) (object=..., data=..., engine=engine@entry=0x562a2444ed90, callArgs=callArgs@entry=0x7f4c473c0670, callType=callType@entry=QMetaObject::InvokeMetaMethod) at jsruntime/qv4qobjectwrapper.cpp:1573
#33 0x00007f4c551720ea in CallOverloaded (callType=<optimized out>, propertyCache=<optimized out>, callArgs=<optimized out>, engine=<optimized out>, data=<optimized out>, object=<optimized out>) at jsruntime/qv4qobjectwrapper.cpp:1645
#34 QV4::QObjectMethod::callInternal(QV4::Value const*, QV4::Value const*, int) const (this=<optimized out>, thisObject=<optimized out>, argv=<optimized out>, argc=<optimized out>) at jsruntime/qv4qobjectwrapper.cpp:2133
#35 0x00007f4c5519f8ae in QV4::FunctionObject::call(QV4::Value const*, QV4::Value const*, int) const (argc=0, argv=0x7f4c473c05f0, thisObject=0x7f4c473c0628, this=0x7fffb4b73798) at jsruntime/qv4functionobject_p.h:172
#36 QV4::Runtime::CallPropertyLookup::call(QV4::ExecutionEngine*, QV4::Value const&, unsigned int, QV4::Value*, int) (engine=0x562a2444ed90, base=..., index=<optimized out>, argv=0x7f4c473c05f0, argc=0) at jsruntime/qv4runtime.cpp:1460
#37 0x00007f4c38db6072 in  ()
#38 0x0000000000000000 in  ()
[Inferior 1 (process 16232) detached]

The reporter indicates this bug may be a duplicate of or related to bug 420730.

Possible duplicates by query: bug 425205, bug 420730, bug 411883.

Reported using DrKonqi
Comment 1 Andreas Cord-Landwehr 2021-05-15 12:56:08 UTC
Git commit d4aaf42d02fab0aaf27ee7346f924d269eeac5c9 by Andreas Cord-Landwehr.
Committed on 15/05/2021 at 12:55.
Pushed by cordlandwehr into branch 'release/21.04'.

Fix invalid index on resource creation

On debug builds this can trigger a QAbstractItemModel assert because
a negative index is used.

M  +1    -1    src/core/iresourcerepository.h
M  +1    -1    src/core/resourcerepository.cpp

https://invent.kde.org/education/artikulate/commit/d4aaf42d02fab0aaf27ee7346f924d269eeac5c9
Comment 2 Andreas Cord-Landwehr 2021-05-15 13:16:01 UTC
*** Bug 420730 has been marked as a duplicate of this bug. ***