kicad-cli jobset run causes segmentation fault

Description

Running a jobset via kicad-cli causes a segmentation fault. Running the same jobset from the GUI finishes successfully.

GDB output:

(gdb) run
Starting program: /usr/bin/kicad-cli jobset run --stop-on-error --file common.kicad_jobset coulomb_counter.kicad_pro
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7fffeebff6c0 (LWP 14942)]
[New Thread 0x7fffedbfe6c0 (LWP 14943)]
[New Thread 0x7fffecbfd6c0 (LWP 14944)]
[New Thread 0x7fffebbfc6c0 (LWP 14945)]
[New Thread 0x7fffeabfb6c0 (LWP 14946)]
[New Thread 0x7fffe9bfa6c0 (LWP 14947)]
|--------------------------------
| Running jobs for destination d289a4c3-15ec-4e02-92f4-a3700d8878f8
|--------------------------------
|No.   | Description
|1     | Export Gerbers
|2     | Export drill data
|--------------------------------


|--------------------------------
| Running job 1: Export Gerbers
|--------------------------------
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-F_Cu.gtl'.
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-B_Cu.gbl'.
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-F_Paste.gtp'.
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-B_Paste.gbp'.
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-F_Silkscreen.gto'.
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-B_Silkscreen.gbo'.
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-F_Mask.gts'.
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-B_Mask.gbs'.
Plotted to '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter-Edge_Cuts.gm1'.
Job successful


|--------------------------------
| Running job 2: Export drill data
|--------------------------------
Created file '/tmp/75a99f47-6c2c-47e4-9822-52480c5dd6a5/coulomb_counter.drl'
Done.
Job successful



Thread 1 "kicad-cli" received signal SIGSEGV, Segmentation fault.
0x00007ffff6ad4ec0 in operator() (__closure=<optimized out>, token=0x7fffffffb8e0) at /usr/src/debug/kicad/kicad/common/common.cpp:66
66	        return aProject->TextVarResolver( token );
(gdb) bt
#0  0x00007ffff6ad4ec0 in operator() (__closure=<optimized out>, token=0x7fffffffb8e0) at /usr/src/debug/kicad/kicad/common/common.cpp:66
#1  std::__invoke_impl<bool, ExpandTextVars(const wxString&, const PROJECT*, int)::<lambda(wxString*)>&, wxString*> (__f=...) at /usr/include/c++/16.1.1/bits/invoke.h:63
#2  std::__invoke_r<bool, ExpandTextVars(const wxString&, const PROJECT*, int)::<lambda(wxString*)>&, wxString*> (__fn=...) at /usr/include/c++/16.1.1/bits/invoke.h:116
#3  std::_Function_handler<bool(wxString*), ExpandTextVars(const wxString&, const PROJECT*, int)::<lambda(wxString*)> >::_M_invoke(const std::_Any_data &, wxString *&&) (__functor=..., __args#0=<optimized out>)
    at /usr/include/c++/16.1.1/bits/std_function.h:295
#4  0x00007ffff6add163 in std::function<bool(wxString*)>::operator() (this=0x7fffffffba70, __args#0=<optimized out>) at /usr/include/c++/16.1.1/bits/std_function.h:581
#5  ExpandTextVars (aSource=..., aResolver=aResolver@entry=0x7fffffffba70, aFlags=0, aDepth=aDepth@entry=0) at /usr/src/debug/kicad/kicad/common/common.cpp:278
#6  0x00007ffff6add96c in ExpandTextVars (aSource=..., aProject=<optimized out>, aFlags=<optimized out>) at /usr/src/debug/kicad/kicad/common/common.cpp:69
#7  0x00007ffff67ff9c6 in JOBS_OUTPUT_ARCHIVE::HandleOutputs (this=0x555556173020, baseTempPath=..., aProject=0x555555e019d0, aPathsWithOverwriteDisallowed=..., aOutputsToHandle=...,
    aResolvedOutputPath=std::optional [no contained value]) at /usr/src/debug/kicad/kicad/common/jobs/jobs_output_archive.cpp:55
#8  0x0000555555603f55 in JOBS_RUNNER::RunJobsForDestination (this=0x7fffffffc270, aDestination=0x555555bbe470, aBail=true) at /usr/src/debug/kicad/kicad/kicad/jobs_runner.cpp:335
#9  0x00005555555cf4a2 in JOBS_RUNNER::RunJobsAllDestinations (this=0x7fffffffc270, aBail=true) at /usr/src/debug/kicad/kicad/kicad/jobs_runner.cpp:54
#10 CLI::JOBSET_RUN_COMMAND::doPerform (this=<optimized out>, aKiway=...) at /usr/src/debug/kicad/kicad/kicad/cli/command_jobset_run.cpp:96
#11 0x00005555555c95ce in CLI::COMMAND::Perform (aKiway=..., this=0x55555562a4a0 <_ZL12jobsetRunCmd.lto_priv.0>) at /usr/src/debug/kicad/kicad/kicad/cli/command.cpp:119
#12 PGM_KICAD::OnPgmRun (this=<optimized out>) at /usr/src/debug/kicad/kicad/kicad/kicad_cli.cpp:537
#13 0x00005555555cab40 in APP_KICAD_CLI::OnRun (this=<optimized out>) at /usr/src/debug/kicad/kicad/kicad/kicad_cli.cpp:657
#14 0x00007ffff72ec261 in wxEntry (argc=@0x7ffff74425a4: 7, argv=<optimized out>) at /usr/src/debug/wxwidgets/wxWidgets/src/common/init.cpp:497
#15 0x00007ffff72ec324 in wxEntry (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/wxwidgets/wxWidgets/src/common/init.cpp:509
#16 0x000055555557e7df in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/kicad/kicad/kicad/kicad_cli.cpp:715

Steps to reproduce

  1. Extract the archive
  2. Run kicad-cli jobset run --stop-on-error --file common.kicad_jobset coulomb_counter.kicad_pro

KiCad Version

Application: KiCad PCB Editor x86_64 on x86_64

Version: 10.0.3, release build

Libraries:
	wxWidgets 3.2.10 EGL
	FreeType 2.14.3
	HarfBuzz 14.2.0
	FontConfig 2.17.1
	libcurl/8.20.0 OpenSSL/3.6.2 zlib/1.3.2 brotli/1.2.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.21.5 libssh2/1.11.1 nghttp2/1.69.0 ngtcp2/1.22.1 nghttp3/1.15.0 mit-krb5/1.21.3

Platform: Arch Linux, 64 bit, Little endian, wxGTK, X11, x11, GNOME, 
OpenGL: Intel, Mesa Intel(R) UHD Graphics 630 (CFL GT2), 4.6 (Compatibility Profile) Mesa 26.0.6-arch1.1, EGL

Build Info:
	Date: May 15 2026 09:04:10
	wxWidgets: 3.2.10 (wchar_t,wx containers) GTK+ 3.24
	Boost: 1.91.0
	OCC: 7.9.3
	Curl: 8.20.0
	ngspice: 46
	Compiler: GCC 16.1.1 with C++ ABI 1021
	KICAD_IPC_API=ON
	KICAD_USE_PCH=OFF

Locale: 
	Lang: en_GB
	Enc: UTF-8
	Num: 1,234.5
	Encoded кΩ丈: D0BACEA9E4B888 (sys), D0BACEA9E4B888 (utf8)

kicad-cli-segfault.zip

Edited by Michal Procházka