Open ivan-pi opened 1 year ago
The problem is more obvious in INICHB
where CSET
gets called:
NVST = NPDE*NPTS + 1
C ...
IV = NPDE*NPTS
IF (NV.GT.0) THEN
IV = NVST
C ...
END IF
CALL CSET(NPDE,NPTS,U,WK(I6),WK,WK(I2),WK(I5),NEL,NPTL,WK(I4),
* WK(I12),XBK,IBK,WK(I3),U(IV),NV)
If NV = 0
, the element U(IV)
will be the alias for U(NPDE*NPTS)
or U(1,NPTS)
in the UVINIT
routine.
The
V
argument is passed as an array of size 1.https://github.com/ivan-pi/pdecheb/blob/f4294351471375835c79cbfbe508eb8e2f1b39b0/pdecheb/cset.f#L1-L11
...
https://github.com/ivan-pi/pdecheb/blob/f4294351471375835c79cbfbe508eb8e2f1b39b0/pdecheb/cset.f#L122
This can have some surprising effects, if
NV = 0
, but the solution array would be declared asY(NPDE*NPTS + 1)
in the calling program. Here's the initialization routine that exposes the issue:In practice this should be flagged as an out-of-bounds violation (or produce a segfault).