Skip to content

Commit 3e961c2

Browse files
authored
Merge pull request #5251 from martin-frbg/issue5250
Fix out-of-bounds accesses in ?/SCAL/?GEEV triggered by preceding errrors/invalid inputs
2 parents 0ea9205 + 5c958df commit 3e961c2

File tree

4 files changed

+12
-12
lines changed

4 files changed

+12
-12
lines changed

lapack-netlib/SRC/cgeev.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -485,12 +485,12 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
485485
* Undo scaling if necessary
486486
*
487487
50 CONTINUE
488-
IF( SCALEA ) THEN
488+
IF( SCALEA .AND. INFO.GT.0 ) THEN
489489
CALL CLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, W( INFO+1 ),
490490
$ MAX( N-INFO, 1 ), IERR )
491-
IF( INFO.GT.0 ) THEN
491+
492492
CALL CLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, W, N, IERR )
493-
END IF
493+
494494
END IF
495495
*
496496
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)

lapack-netlib/SRC/dgeev.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -506,17 +506,17 @@ SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,
506506
* Undo scaling if necessary
507507
*
508508
50 CONTINUE
509-
IF( SCALEA ) THEN
509+
IF( SCALEA .AND. INFO.GT.0) THEN
510510
CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, WR( INFO+1 ),
511511
$ MAX( N-INFO, 1 ), IERR )
512512
CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, WI( INFO+1 ),
513513
$ MAX( N-INFO, 1 ), IERR )
514-
IF( INFO.GT.0 ) THEN
514+
515515
CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WR, N,
516516
$ IERR )
517517
CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WI, N,
518518
$ IERR )
519-
END IF
519+
520520
END IF
521521
*
522522
WORK( 1 ) = MAXWRK

lapack-netlib/SRC/sgeev.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -504,17 +504,17 @@ SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,
504504
* Undo scaling if necessary
505505
*
506506
50 CONTINUE
507-
IF( SCALEA ) THEN
507+
IF( SCALEA .AND. INFO.GT.0) THEN
508508
CALL SLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, WR( INFO+1 ),
509509
$ MAX( N-INFO, 1 ), IERR )
510510
CALL SLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, WI( INFO+1 ),
511511
$ MAX( N-INFO, 1 ), IERR )
512-
IF( INFO.GT.0 ) THEN
512+
513513
CALL SLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WR, N,
514514
$ IERR )
515515
CALL SLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WI, N,
516516
$ IERR )
517-
END IF
517+
518518
END IF
519519
*
520520
WORK( 1 ) = SROUNDUP_LWORK(MAXWRK)

lapack-netlib/SRC/zgeev.f

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -485,12 +485,12 @@ SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
485485
* Undo scaling if necessary
486486
*
487487
50 CONTINUE
488-
IF( SCALEA ) THEN
488+
IF( SCALEA .AND. INFO.GT.0) THEN
489489
CALL ZLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, W( INFO+1 ),
490490
$ MAX( N-INFO, 1 ), IERR )
491-
IF( INFO.GT.0 ) THEN
491+
492492
CALL ZLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, W, N, IERR )
493-
END IF
493+
494494
END IF
495495
*
496496
WORK( 1 ) = MAXWRK

0 commit comments

Comments
 (0)