Bug 513380 - Assertion failure when running search and replace on many files
Summary: Assertion failure when running search and replace on many files
Status: REPORTED
Alias: None
Product: lokalize
Classification: Applications
Component: general (other bugs)
Version First Reported In: 25.12.0
Platform: Arch Linux Linux
: NOR normal
Target Milestone: ---
Assignee: Finley Watson
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-12-15 00:01 UTC by Finley Watson
Modified: 2025-12-15 00:03 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Finley Watson 2025-12-15 00:01:50 UTC
1. Open project with lots of files
2. Open file in editor tab
3. Open Tools -> Search and replace in files
4. Search "Source" for something tiny like "a"
5. In Mass replace dock, enter "a" in Replace, click Preview
6. In With enter something else e.g. "WWWW", click Mass Replace

Lots of files are modified, if running Lokalize from the terminal there is a lot of debug output like:

> skipping replace because "bla bla" != "blWWWW blWWWW"

Sometimes output like:

> QFile::remove: Empty or null file name
> QObject: Cannot create children for a parent that is in a different thread.
> (Parent is QThreadPoolThread(0x55a5aa756a80), parent's thread is QThread(0x55a5a8dc4350), current thread is QThreadPoolThread(0x55a5aa756a80)

Lines immediately prior to assertion fail are:

> QFile::remove: Empty or null file name
> QObject: Cannot create children for a parent that is in a different thread.
> (Parent is QThreadPoolThread(0x55a5aa756a80), parent's thread is QThread(0x55a5a8dc4350), current thread is QThreadPoolThread(0x55a5aa756a80)
> ASSERT: "info.translated == FileMetaData::extract(file.localPath()).translated" in file /home/puf/kde/src/lokalize/src/project/updatestatsjob.cpp, line 79

GDB backtrace:

#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44                                                 
44            return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO (ret) : 0;
[Current thread is 1 (Thread 0x7feaaaffd6c0 (LWP 300481))]
(gdb) backtrace
#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1  0x00007feaeb0989d3 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:89
#2  0x00007feaeb03e3a0 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3  0x00007feaeb02557a in __GI_abort () at abort.c:77
#4  0x00007feaeb8934a4 in qAbort () at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qassert.cpp:46
#5  qt_maybe_message_fatal<QString&> (msgType=QtFatalMsg, context=<optimized out>, message=...) at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qlogging.cpp:2166
#6  qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *)
    (msgType=msgType@entry=QtFatalMsg, context=..., msg=msg@entry=0x7feaebc78290 "ASSERT: \"%s\" in file %s, line %d", ap=ap@entry=0x7feaaaffc258)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qlogging.cpp:412
#7  0x00007feaeb894268 in QMessageLogger::fatal (this=<optimized out>, msg=0x7feaebc78290 "ASSERT: \"%s\" in file %s, line %d")
    at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qlogging.cpp:901
#8  0x00007feaeb891930 in qt_assert (assertion=<optimized out>, file=<optimized out>, line=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/global/qassert.cpp:113
#9  0x000055a5940b587c in cachedMetaData (file=...) at /home/fin-w/kde/src/lokalize/src/project/updatestatsjob.cpp:79
#10 0x000055a5940b5f79 in UpdateStatsJob::run (this=0x55a5afe9edd0) at /home/fin-w/kde/src/lokalize/src/project/updatestatsjob.cpp:119
#11 0x00007feaeba8efc5 in QThreadPoolThread::run (this=0x55a5a95a16c0) at /usr/src/debug/qt6-base/qtbase/src/corelib/thread/qthreadpool.cpp:72
#12 0x00007feaebb2f899 in operator() (__closure=<optimized out>) at /usr/src/debug/qt6-base/qtbase/src/corelib/thread/qthread_unix.cpp:437
#13 (anonymous namespace)::terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > (t=<optimized out>)
    at /usr/src/debug/qt6-base/qtbase/src/corelib/thread/qthread_unix.cpp:367
#14 QThreadPrivate::start (arg=0x55a5a95a16c0) at /usr/src/debug/qt6-base/qtbase/src/corelib/thread/qthread_unix.cpp:397
#15 0x00007feaeb09698b in start_thread (arg=<optimized out>) at pthread_create.c:448
#16 0x00007feaeb11a9cc in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
Comment 1 Finley Watson 2025-12-15 00:03:00 UTC
This needs assertions turned on to trigger so needs to be built locally with them on. It's present in current Git main branch.