diff options
author | Thomas Mijieux <thomas.mijieux@inria.fr> | 2017-05-04 14:32:29 +0200 |
---|---|---|
committer | Thomas Mijieux <thomas.mijieux@inria.fr> | 2017-05-04 14:32:29 +0200 |
commit | 38ec074a4fa75dc4e421c83d51bfd8d02971f4f8 (patch) | |
tree | c02652c16560f943b652d881700e6d121d6338f2 /LAPACKE | |
parent | b5fac0f9a5945c4a3454d597b9d1081a053c8f66 (diff) | |
download | lapack-38ec074a4fa75dc4e421c83d51bfd8d02971f4f8.tar.gz lapack-38ec074a4fa75dc4e421c83d51bfd8d02971f4f8.tar.bz2 lapack-38ec074a4fa75dc4e421c83d51bfd8d02971f4f8.zip |
Fix issue #143 (Invalid ?tpmqrt workspace allocation)
Diffstat (limited to 'LAPACKE')
-rw-r--r-- | LAPACKE/src/lapacke_ctpmqrt.c | 5 | ||||
-rw-r--r-- | LAPACKE/src/lapacke_dtpmqrt.c | 5 | ||||
-rw-r--r-- | LAPACKE/src/lapacke_stpmqrt.c | 5 | ||||
-rw-r--r-- | LAPACKE/src/lapacke_ztpmqrt.c | 5 |
4 files changed, 16 insertions, 4 deletions
diff --git a/LAPACKE/src/lapacke_ctpmqrt.c b/LAPACKE/src/lapacke_ctpmqrt.c index 96db86be..fba2a237 100644 --- a/LAPACKE/src/lapacke_ctpmqrt.c +++ b/LAPACKE/src/lapacke_ctpmqrt.c @@ -43,6 +43,7 @@ lapack_int LAPACKE_ctpmqrt( int matrix_layout, char side, char trans, { lapack_int ncols_a, nrows_a; lapack_int nrows_v; + lapack_int lwork; lapack_int info = 0; lapack_complex_float* work = NULL; if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { @@ -71,8 +72,10 @@ lapack_int LAPACKE_ctpmqrt( int matrix_layout, char side, char trans, } #endif /* Allocate memory for working array(s) */ + lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) : + ( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 ); work = (lapack_complex_float*) - LAPACKE_malloc( sizeof(lapack_complex_float) * MAX(1,m) * MAX(1,nb) ); + LAPACKE_malloc( sizeof(lapack_complex_float) * lwork ); if( work == NULL ) { info = LAPACK_WORK_MEMORY_ERROR; goto exit_level_0; diff --git a/LAPACKE/src/lapacke_dtpmqrt.c b/LAPACKE/src/lapacke_dtpmqrt.c index 9015ef09..14089046 100644 --- a/LAPACKE/src/lapacke_dtpmqrt.c +++ b/LAPACKE/src/lapacke_dtpmqrt.c @@ -42,6 +42,7 @@ lapack_int LAPACKE_dtpmqrt( int matrix_layout, char side, char trans, { lapack_int ncols_a, nrows_a; lapack_int nrows_v; + lapack_int lwork; lapack_int info = 0; double* work = NULL; if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { @@ -70,7 +71,9 @@ lapack_int LAPACKE_dtpmqrt( int matrix_layout, char side, char trans, } #endif /* Allocate memory for working array(s) */ - work = (double*)LAPACKE_malloc( sizeof(double) * MAX(1,m) * MAX(1,nb) ); + lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) : + ( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 ); + work = (double*)LAPACKE_malloc( sizeof(double) * lwork ); if( work == NULL ) { info = LAPACK_WORK_MEMORY_ERROR; goto exit_level_0; diff --git a/LAPACKE/src/lapacke_stpmqrt.c b/LAPACKE/src/lapacke_stpmqrt.c index 29df845a..cb283a3b 100644 --- a/LAPACKE/src/lapacke_stpmqrt.c +++ b/LAPACKE/src/lapacke_stpmqrt.c @@ -41,6 +41,7 @@ lapack_int LAPACKE_stpmqrt( int matrix_layout, char side, char trans, { lapack_int ncols_a, nrows_a; lapack_int nrows_v; + lapack_int lwork; lapack_int info = 0; float* work = NULL; if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { @@ -69,7 +70,9 @@ lapack_int LAPACKE_stpmqrt( int matrix_layout, char side, char trans, } #endif /* Allocate memory for working array(s) */ - work = (float*)LAPACKE_malloc( sizeof(float) * MAX(1,m) * MAX(1,nb) ); + lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) : + ( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 ); + work = (float*)LAPACKE_malloc( sizeof(float) * lwork ); if( work == NULL ) { info = LAPACK_WORK_MEMORY_ERROR; goto exit_level_0; diff --git a/LAPACKE/src/lapacke_ztpmqrt.c b/LAPACKE/src/lapacke_ztpmqrt.c index 72b83fc0..e3bd95a6 100644 --- a/LAPACKE/src/lapacke_ztpmqrt.c +++ b/LAPACKE/src/lapacke_ztpmqrt.c @@ -43,6 +43,7 @@ lapack_int LAPACKE_ztpmqrt( int matrix_layout, char side, char trans, { lapack_int ncols_a, nrows_a; lapack_int nrows_v; + lapack_int lwork; lapack_int info = 0; lapack_complex_double* work = NULL; if( matrix_layout != LAPACK_COL_MAJOR && matrix_layout != LAPACK_ROW_MAJOR ) { @@ -71,8 +72,10 @@ lapack_int LAPACKE_ztpmqrt( int matrix_layout, char side, char trans, } #endif /* Allocate memory for working array(s) */ + lwork = LAPACKE_lsame( side, 'L' ) ? MAX(1,nb) * MAX(1,n) : + ( LAPACKE_lsame( side, 'R' ) ? MAX(1,m) * MAX(1,nb) : 0 ); work = (lapack_complex_double*) - LAPACKE_malloc( sizeof(lapack_complex_double) * MAX(1,m) * MAX(1,nb) ); + LAPACKE_malloc( sizeof(lapack_complex_double) * lwork ); if( work == NULL ) { info = LAPACK_WORK_MEMORY_ERROR; goto exit_level_0; |