Source: gnuplot
Version: 5.2.6+dfsg1-1
Severity: important

Hi,

After upgrading lindsay.d.o to buster, we see errors when trying to
generate graphs of the tags.  While trying to create a minimal
reproducer I tripped a double free bug in gnuplot.

The following steps were done to reproduce the issue:

"""
$ unzip test-files.zip
$ cd test-files
test-files$ gdb -args gnuplot call.gp
[...]
(gdb) run
Starting program: /usr/bin/gnuplot call.gpi
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Plotting $tag statistics...
"./tags.gpi" line 27: undefined variable: date_min

free(): double free detected in tcache 2

Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007ffff78c6535 in __GI_abort () at abort.c:79
#2  0x00007ffff791d778 in __libc_message (action=action@entry=do_abort, 
fmt=fmt@entry=0x7ffff7a2828d "%s\n") at ../sysdeps/posix/libc_fatal.c:181
#3  0x00007ffff7923e6a in malloc_printerr (str=str@entry=0x7ffff7a29f58 
"free(): double free detected in tcache 2") at malloc.c:5341
#4  0x00007ffff792594d in _int_free (av=0x7ffff7a5fc40 <main_arena>, 
p=0x5555556eb250, have_lock=<optimized out>) at malloc.c:4193
#5  0x000055555558d71d in gpfree_string (a=0x5555556e9828) at 
.././../../src/eval.c:423
#6  0x000055555558dbcb in gpfree_string (a=<optimized out>) at 
.././../../src/eval.c:422
#7  gpfree_array (a=a@entry=0x5555556e9860) at .././../../src/eval.c:446
#8  0x00005555555be5a7 in lf_pop () at .././../../src/misc.c:515
#9  0x00005555555bebad in load_file_error () at .././../../src/misc.c:626
#10 0x000055555556e8e5 in main (argc=2, argv=0x7fffffffe178) at 
.././../../src/plot.c:555
(gdb) quit
"""

Note: The test files *are* invalid - the common.gpi file should define
some variables but it does not (e.g. date_min).  Nonetheless, gnuplot
should not trip a double-free regardless of whether the input is valid
or not.

Relevant versions of gnuplot used for reproducing this:

"""
$ dpkg -l | grep gnuplot
ii  gnuplot-data                         5.2.6+dfsg1-1                       
all          Command-line driven interactive plotting program. Data-files
ii  gnuplot-nox                          5.2.6+dfsg1-1                       
amd64        Command-line driven interactive plotting program. No-X package
ii  gnuplot-nox-dbgsym                   5.2.6+dfsg1-1                       
amd64        debug symbols for gnuplot-nox
"""

Thanks,
~Niels

Reply via email to