Skip to content

Commit d2e43a4

Browse files
pgplot: fix overflow of bounds leading to segfaults
1 parent 1ac8e44 commit d2e43a4

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

star/private/pgstar_support.f90

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -742,25 +742,31 @@ subroutine set_grid_minmax(&
742742
! use given if it isn't = 101
743743
use_given_xmin = abs(given_xmin + 101.0) > 1e-6
744744
if (xaxis_by == 'mass' .and. given_xmin < 0 .and. use_given_xmin) then
745-
xmin = maxval(xvec(1:nz)) + given_xmin
745+
xmin = maxval(xvec(1:nz), mask=.not. is_bad(xvec(1:nz))) + given_xmin
746746
else if (use_given_xmin) then
747747
xmin = given_xmin
748748
else if (xaxis_by == 'logxm' .or. xaxis_by == 'logxq') then
749-
xmin = minval(xvec(2:nz))
749+
xmin = minval(xvec(2:nz), mask=.not. is_bad(xvec(2:nz)))
750750
else
751-
xmin = minval(xvec(1:nz))
751+
xmin = minval(xvec(1:nz), mask=.not. is_bad(xvec(1:nz)))
752752
end if
753753

754754
use_given_xmax = abs(given_xmax + 101.0) > 1e-6
755755
if (xaxis_by == 'mass' .and. given_xmax < 0 .and. use_given_xmax) then
756-
xmax = maxval(xvec(1:nz)) + given_xmax
756+
xmax = maxval(xvec(1:nz), mask=.not. is_bad(xvec(1:nz))) + given_xmax
757757
else if (use_given_xmax) then
758758
xmax = given_xmax
759759
else
760-
xmax = maxval(xvec(1:nz))
760+
xmax = maxval(xvec(1:nz), mask=.not. is_bad(xvec(1:nz)))
761761
end if
762762
dx = xmax - xmin
763763

764+
if (is_bad(dx)) then
765+
xmax = given_xmax
766+
xmin = given_xmin
767+
dx = xmax - xmin
768+
end if
769+
764770
if (.not. use_given_xmin) xmin = xmin - margin * dx
765771
if (.not. use_given_xmax) xmax = xmax + margin * dx
766772

@@ -854,17 +860,23 @@ subroutine set_ytop_ybot(&
854860
if (use_given_ymin) then
855861
ymin = given_ymin
856862
else
857-
ymin = minval(yvec(1:npts))
863+
ymin = minval(yvec(1:npts), mask=.not. is_bad(yvec(1:npts)))
858864
end if
859865

860866
use_given_ymax = abs(given_ymax + 101.0) > 1e-6
861867
if (use_given_ymax) then
862868
ymax = given_ymax
863869
else
864-
ymax = maxval(yvec(1:npts))
870+
ymax = maxval(yvec(1:npts), mask=.not. is_bad(yvec(1:npts)))
865871
end if
866872
dy = ymax - ymin
867873

874+
if (is_bad(dy)) then
875+
ymax = given_ymax
876+
ymin = given_ymin
877+
dy = ymax - ymin
878+
end if
879+
868880
if (.not. use_given_ymin) ymin = ymin - ymargin * dy
869881
if (.not. use_given_ymax) ymax = ymax + ymargin * dy
870882

0 commit comments

Comments
 (0)