Package: ploticus
Version: 2.42-4
Severity: important
Tags: patch upstream

Dear Maintainer,

Lines are sometimes drawn with one end extending to lower left. Rendering the
same input might usually look fine, but fail randomly. Example input and output
of 100 iterations attached.

The cause seems to be reading outside of allocated memory
on line execline.c:489. This leads to a wrong argument count causing the
following warning:

pl proc line:  2959: warning: points must have either 4 or 2 values per line



-- System Information:
Debian Release: buster/sid
  APT prefers bionic-updates
  APT policy: (500, 'bionic-updates'), (500, 'bionic-security'), (500,
'bionic'), (100, 'bionic-backports')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.15.0-36-generic (SMP w/3 CPU cores)
Locale: LANG=fi_FI.UTF-8, LC_CTYPE=fi_FI.UTF-8 (charmap=UTF-8),
LANGUAGE=fi_FI.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages ploticus depends on:
ii  libc6     2.27-3ubuntu1
ii  libgd3    2.2.5-4ubuntu0.2
ii  libx11-6  2:1.6.4-3ubuntu0.1
ii  zlib1g    1:1.2.11.dfsg-0ubuntu2

ploticus recommends no packages.

ploticus suggests no packages.
#proc page
  dopagebox: yes
  pagesize: 3.380 0.600

#proc areadef
  rectangle: 0.010 0.010 3.37 0.59
  yscaletype: linear
  yrange: 0 60
  xscaletype: linear
  xrange: 0.999 2.000
  #saveas: A

#proc legendentry
  sampletype: color
  details: rgb(0,0.6,0)
  tag: barcoldefault

#proc legendentry
  sampletype: color
  details: black
  tag: black

#proc legendentry
  sampletype: color
  details: rgb(0.9,0.3,0.3)
  tag: dummy0

#proc legendentry
  sampletype: color
  details: rgb(0.9,0.3,0.3)
  tag: dummy1

#proc legendentry
  sampletype: color
  details: rgb(0.9,0.3,0.3)
  tag: dummy2

#proc legendentry
  sampletype: color
  details: rgb(0.9,0.3,0.3)
  tag: dummy3

#proc legendentry
  sampletype: color
  details: rgb(0.9,0.3,0.3)
  tag: dummy4

#proc legendentry
  sampletype: color
  details: rgb(0.9,0.3,0.3)
  tag: dummy5

#proc legendentry
  sampletype: color
  details: gray(0.0)
  tag: s

#proc legendentry
  sampletype: color
  details: rgb(0.9,0.3,0.3)
  tag: sx

#proc legendentry
  sampletype: color
  details: gray(0.5)
  tag: textcol

#proc legendentry
  sampletype: color
  details: gray(1)
  tag: w

#proc legendentry
  sampletype: color
  details: gray(0.999)
  tag: white

#proc legendentry
  sampletype: color
  details: rgb(1,0.7,0.7)
  tag: wx




#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 0.050 0(s)+0.05 0.050 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 0.095 0(s)+0.05 0.095 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 0.170 0(s)+0.05 0.170 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 0.215 0(s)+0.05 0.215 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 0.530 0(s)+0.05 0.530 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 0.575 0(s)+0.05 0.575 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 0.650 0(s)+0.05 0.650 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 0.695 0(s)+0.05 0.695 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 1.010 0(s)+0.05 1.010 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 1.055 0(s)+0.05 1.055 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 1.130 0(s)+0.05 1.130 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 1.175 0(s)+0.05 1.175 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 2.450 0(s)+0.05 2.450 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 2.495 0(s)+0.05 2.495 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 2.570 0(s)+0.05 2.570 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 2.615 0(s)+0.05 2.615 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 2.930 0(s)+0.05 2.930 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 2.975 0(s)+0.05 2.975 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 3.050 0(s)+0.05 3.050 60(s)-0.05
#proc line
  linedetails: width=10 color=rgb(1,0.7,0.7) style=0
  points: 3.095 0(s)+0.05 3.095 60(s)-0.05
#proc line
  linedetails: width=0.2 color=black style=0
  points: 0.010 2(s)+0.001 0.010 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 0.250 2(s)+0.001 0.250 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 0.490 2(s)+0.001 0.490 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 0.730 2(s)+0.001 0.730 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 0.970 2(s)+0.001 0.970 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 1.210 2(s)+0.001 1.210 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 1.450 2(s)+0.001 1.450 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 1.690 2(s)+0.001 1.690 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 1.930 2(s)+0.001 1.930 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 2.170 2(s)+0.001 2.170 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 2.410 2(s)+0.001 2.410 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 2.650 2(s)+0.001 2.650 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 2.890 2(s)+0.001 2.890 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 3.130 2(s)+0.001 3.130 60(s)-0.001
#proc line
  linedetails: width=0.2 color=black style=0
  points: 3.370 2(s)+0.001 3.370 60(s)-0.001
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 0.220 24(s)+0.03 0.220 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 0.280 24(s)+0.03 0.280 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 0.460 24(s)+0.03 0.460 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 0.520 24(s)+0.03 0.520 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 0.940 24(s)+0.03 0.940 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 1.000 24(s)+0.03 1.000 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 1.180 24(s)+0.03 1.180 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 1.240 24(s)+0.03 1.240 60(s)-0.03
#proc line
  linedetails: width=6 color=rgb(0.9,0.3,0.3) style=0
  points: 1.420 24(s)+0.03 1.420 60(s)-0.03
#proc line
  linedetails: width=6 color=rgb(0.9,0.3,0.3) style=0
  points: 1.480 24(s)+0.03 1.480 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 1.900 24(s)+0.03 1.900 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 1.960 24(s)+0.03 1.960 60(s)-0.03
#proc line
  linedetails: width=6 color=rgb(0.9,0.3,0.3) style=0
  points: 2.140 24(s)+0.03 2.140 60(s)-0.03
#proc line
  linedetails: width=6 color=rgb(0.9,0.3,0.3) style=0
  points: 2.200 24(s)+0.03 2.200 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 2.620 24(s)+0.03 2.620 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 2.680 24(s)+0.03 2.680 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 2.860 24(s)+0.03 2.860 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 2.920 24(s)+0.03 2.920 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 3.100 24(s)+0.03 3.100 60(s)-0.03
#proc line
  linedetails: width=6 color=gray(0.0) style=0
  points: 3.160 24(s)+0.03 3.160 60(s)-0.03
#proc line
  linedetails: width=0.2 color=black style=0
  points: 0.011 2(s) 3.369 2(s)
#proc line
  linedetails: width=0.2 color=black style=0
  points: 0.011 59(s) 3.369 59(s)


#proc annotate
  location: 0.08 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: c

#proc annotate
  location: 0.32 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: d

#proc annotate
  location: 0.56 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: e

#proc annotate
  location: 0.8 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: f

#proc annotate
  location: 1.04 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: g

#proc annotate
  location: 1.28 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: a

#proc annotate
  location: 1.52 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: b

#proc annotate
  location: 1.76 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: c

#proc annotate
  location: 2 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: d

#proc annotate
  location: 2.24 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: e

#proc annotate
  location: 2.48 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: f

#proc annotate
  location: 2.72 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: g

#proc annotate
  location: 2.96 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: a

#proc annotate
  location: 3.2 0.04
  textdetails: align=center size=8 color=gray(0.5)
  text: b







#endproc
diff --git a/pl241src/src/execline.c b/pl241src/src/execline.c
index b733c74..63d5675 100644
--- a/pl241src/src/execline.c
+++ b/pl241src/src/execline.c
@@ -457,7 +457,7 @@ txtstartline = PLL.curline;
 txtlen = strlen( firstline );
 
 /* go until we hit an empty line, or reach end of proc.. */
-for( iline = txtstartline; iline <= procstop ; iline++ ) {
+for( iline = txtstartline; iline < procstop ; iline++ ) {
        line = PLL.procline[ iline ];
        for( i = 0, emptyline = 1; line[i] != '\0'; i++ ) if( !isspace( (int) 
line[i] )) { emptyline = 0; break; }
        if( emptyline ) break;
@@ -485,7 +485,7 @@ if( firstline[i] != '\0' ) {
 
 
 /* now fill mem.. */
-for( iline = txtstartline; iline < txtstopline && iline <= procstop; iline++ ) 
{
+for( iline = txtstartline; iline < txtstopline; iline++ ) {
        line = PLL.procline[ iline ];
        
        /* skip over leading whitespace as well as any leading backslash.. */
diff --git a/pl241src/src/proc_line.c b/pl241src/src/proc_line.c
index 166321f..af41aad 100644
--- a/pl241src/src/proc_line.c
+++ b/pl241src/src/proc_line.c
@@ -19,7 +19,7 @@ int lvp, first;
 
 char buf[256];
 double x, y, ancx, ancy;
-char *linedetails, *drawpoints;
+char *linedetails, *drawpoints = NULL;
 char notation;
 char a[40], b[40], c[40], d[40];
 int nt, ix, buflen, ancgiven;

Reply via email to