@@ -1128,6 +1128,7 @@ static void
1128
1128
npy_uint8 * tmp_buff = NULL ;
1129
1129
size_t matrix_size ;
1130
1130
size_t pivot_size ;
1131
+ size_t safe_m ;
1131
1132
/* notes:
1132
1133
* matrix will need to be copied always, as factorization in lapack is
1133
1134
* made inplace
@@ -1138,8 +1139,9 @@ static void
1138
1139
*/
1139
1140
INIT_OUTER_LOOP_3
1140
1141
m = (fortran_int ) dimensions [0 ];
1141
- matrix_size = m * m * sizeof (@typ @);
1142
- pivot_size = m * sizeof (fortran_int );
1142
+ safe_m = m ;
1143
+ matrix_size = safe_m * safe_m * sizeof (@typ @);
1144
+ pivot_size = safe_m * sizeof (fortran_int );
1143
1145
tmp_buff = (npy_uint8 * )malloc (matrix_size + pivot_size );
1144
1146
1145
1147
if (tmp_buff )
@@ -1172,6 +1174,7 @@ static void
1172
1174
npy_uint8 * tmp_buff ;
1173
1175
size_t matrix_size ;
1174
1176
size_t pivot_size ;
1177
+ size_t safe_m ;
1175
1178
/* notes:
1176
1179
* matrix will need to be copied always, as factorization in lapack is
1177
1180
* made inplace
@@ -1182,8 +1185,9 @@ static void
1182
1185
*/
1183
1186
INIT_OUTER_LOOP_2
1184
1187
m = (fortran_int ) dimensions [0 ];
1185
- matrix_size = m * m * sizeof (@typ @);
1186
- pivot_size = m * sizeof (fortran_int );
1188
+ safe_m = m ;
1189
+ matrix_size = safe_m * safe_m * sizeof (@typ @);
1190
+ pivot_size = safe_m * sizeof (fortran_int );
1187
1191
tmp_buff = (npy_uint8 * )malloc (matrix_size + pivot_size );
1188
1192
1189
1193
if (tmp_buff )
@@ -1252,14 +1256,15 @@ init_@lapack_func@(EIGH_PARAMS_t* params, char JOBZ, char UPLO,
1252
1256
fortran_int liwork = -1 ;
1253
1257
fortran_int info ;
1254
1258
npy_uint8 * a , * w , * work , * iwork ;
1255
- size_t alloc_size = N * (N + 1 )* sizeof (@typ @);
1259
+ size_t safe_N = N ;
1260
+ size_t alloc_size = safe_N * (safe_N + 1 ) * sizeof (@typ @);
1256
1261
1257
1262
mem_buff = malloc (alloc_size );
1258
1263
1259
1264
if (!mem_buff )
1260
1265
goto error ;
1261
1266
a = mem_buff ;
1262
- w = mem_buff + N * N * sizeof (@typ @);
1267
+ w = mem_buff + safe_N * safe_N * sizeof (@typ @);
1263
1268
LAPACK (@lapack_func @)(& JOBZ , & UPLO , & N ,
1264
1269
(@ftyp @* )a , & N , (@ftyp @* )w ,
1265
1270
& query_work_size , & lwork ,
@@ -1344,12 +1349,14 @@ init_@lapack_func@(EIGH_PARAMS_t *params,
1344
1349
fortran_int liwork = -1 ;
1345
1350
npy_uint8 * a , * w , * work , * rwork , * iwork ;
1346
1351
fortran_int info ;
1352
+ size_t safe_N = N ;
1347
1353
1348
- mem_buff = malloc (N * N * sizeof (@typ @)+ N * sizeof (@basetyp @));
1354
+ mem_buff = malloc (safe_N * safe_N * sizeof (@typ @) +
1355
+ safe_N * sizeof (@basetyp @));
1349
1356
if (!mem_buff )
1350
1357
goto error ;
1351
1358
a = mem_buff ;
1352
- w = mem_buff + N * N * sizeof (@typ @);
1359
+ w = mem_buff + safe_N * safe_N * sizeof (@typ @);
1353
1360
1354
1361
LAPACK (@lapack_func @)(& JOBZ , & UPLO , & N ,
1355
1362
(@ftyp @* )a , & N , (@fbasetyp @* )w ,
@@ -1581,14 +1588,16 @@ init_@lapack_func@(GESV_PARAMS_t *params, fortran_int N, fortran_int NRHS)
1581
1588
{
1582
1589
npy_uint8 * mem_buff = NULL ;
1583
1590
npy_uint8 * a , * b , * ipiv ;
1584
- mem_buff = malloc (N * N * sizeof (@ftyp @) +
1585
- N * NRHS * sizeof (@ftyp @) +
1586
- N * sizeof (fortran_int ));
1591
+ size_t safe_N = N ;
1592
+ size_t safe_NRHS = NRHS ;
1593
+ mem_buff = malloc (safe_N * safe_N * sizeof (@ftyp @) +
1594
+ safe_N * safe_NRHS * sizeof (@ftyp @) +
1595
+ safe_N * sizeof (fortran_int ));
1587
1596
if (!mem_buff )
1588
1597
goto error ;
1589
1598
a = mem_buff ;
1590
- b = a + N * N * sizeof (@ftyp @);
1591
- ipiv = b + N * NRHS * sizeof (@ftyp @);
1599
+ b = a + safe_N * safe_N * sizeof (@ftyp @);
1600
+ ipiv = b + safe_N * safe_NRHS * sizeof (@ftyp @);
1592
1601
1593
1602
params -> A = a ;
1594
1603
params -> B = b ;
@@ -1759,8 +1768,9 @@ init_@lapack_func@(POTR_PARAMS_t *params, char UPLO, fortran_int N)
1759
1768
{
1760
1769
npy_uint8 * mem_buff = NULL ;
1761
1770
npy_uint8 * a ;
1771
+ size_t safe_N = N ;
1762
1772
1763
- mem_buff = malloc (N * N * sizeof (@ftyp @));
1773
+ mem_buff = malloc (safe_N * safe_N * sizeof (@ftyp @));
1764
1774
if (!mem_buff )
1765
1775
goto error ;
1766
1776
@@ -1924,11 +1934,12 @@ init_@lapack_func@(GEEV_PARAMS_t *params, char jobvl, char jobvr, fortran_int n)
1924
1934
npy_uint8 * mem_buff = NULL ;
1925
1935
npy_uint8 * mem_buff2 = NULL ;
1926
1936
npy_uint8 * a , * wr , * wi , * vlr , * vrr , * work , * w , * vl , * vr ;
1927
- size_t a_size = n * n * sizeof (@typ @);
1928
- size_t wr_size = n * sizeof (@typ @);
1929
- size_t wi_size = n * sizeof (@typ @);
1930
- size_t vlr_size = jobvl == 'V' ? n * n * sizeof (@typ @) : 0 ;
1931
- size_t vrr_size = jobvr == 'V' ? n * n * sizeof (@typ @) : 0 ;
1937
+ size_t safe_n = n ;
1938
+ size_t a_size = safe_n * safe_n * sizeof (@typ @);
1939
+ size_t wr_size = safe_n * sizeof (@typ @);
1940
+ size_t wi_size = safe_n * sizeof (@typ @);
1941
+ size_t vlr_size = jobvl == 'V' ? safe_n * safe_n * sizeof (@typ @) : 0 ;
1942
+ size_t vrr_size = jobvr == 'V' ? safe_n * safe_n * sizeof (@typ @) : 0 ;
1932
1943
size_t w_size = wr_size * 2 ;
1933
1944
size_t vl_size = vlr_size * 2 ;
1934
1945
size_t vr_size = vrr_size * 2 ;
@@ -2120,11 +2131,12 @@ init_@lapack_func@(GEEV_PARAMS_t* params,
2120
2131
npy_uint8 * mem_buff = NULL ;
2121
2132
npy_uint8 * mem_buff2 = NULL ;
2122
2133
npy_uint8 * a , * w , * vl , * vr , * work , * rwork ;
2123
- size_t a_size = n * n * sizeof (@ftyp @);
2124
- size_t w_size = n * sizeof (@ftyp @);
2125
- size_t vl_size = jobvl == 'V' ? n * n * sizeof (@ftyp @) : 0 ;
2126
- size_t vr_size = jobvr == 'V' ? n * n * sizeof (@ftyp @) : 0 ;
2127
- size_t rwork_size = 2 * n * sizeof (@realtyp @);
2134
+ size_t safe_n = n ;
2135
+ size_t a_size = safe_n * safe_n * sizeof (@ftyp @);
2136
+ size_t w_size = safe_n * sizeof (@ftyp @);
2137
+ size_t vl_size = jobvl == 'V' ? safe_n * safe_n * sizeof (@ftyp @) : 0 ;
2138
+ size_t vr_size = jobvr == 'V' ? safe_n * safe_n * sizeof (@ftyp @) : 0 ;
2139
+ size_t rwork_size = 2 * safe_n * sizeof (@realtyp @);
2128
2140
size_t work_count = 0 ;
2129
2141
@typ @ work_size_query ;
2130
2142
fortran_int do_size_query = -1 ;
@@ -2446,20 +2458,27 @@ init_@lapack_func@(GESDD_PARAMS_t *params,
2446
2458
npy_uint8 * mem_buff = NULL ;
2447
2459
npy_uint8 * mem_buff2 = NULL ;
2448
2460
npy_uint8 * a , * s , * u , * vt , * work , * iwork ;
2449
- size_t a_size = (size_t )m * (size_t )n * sizeof (@ftyp @);
2461
+ size_t safe_m = m ;
2462
+ size_t safe_n = n ;
2463
+ size_t a_size = safe_m * safe_n * sizeof (@ftyp @);
2450
2464
fortran_int min_m_n = m < n ?m :n ;
2451
- size_t s_size = ((size_t )min_m_n )* sizeof (@ftyp @);
2452
- fortran_int u_row_count , vt_column_count ;
2465
+ size_t safe_min_m_n = min_m_n ;
2466
+ size_t s_size = safe_min_m_n * sizeof (@ftyp @);
2467
+ fortran_int u_row_count , vt_column_count ;
2468
+ size_t safe_u_row_count , safe_vt_column_count ;
2453
2469
size_t u_size , vt_size ;
2454
2470
fortran_int work_count ;
2455
2471
size_t work_size ;
2456
- size_t iwork_size = 8 * (( size_t ) min_m_n ) * sizeof (fortran_int );
2472
+ size_t iwork_size = 8 * safe_min_m_n * sizeof (fortran_int );
2457
2473
2458
2474
if (!compute_urows_vtcolumns (jobz , m , n , & u_row_count , & vt_column_count ))
2459
2475
goto error ;
2460
2476
2461
- u_size = ((size_t )u_row_count )* m * sizeof (@ftyp @);
2462
- vt_size = n * ((size_t )vt_column_count )* sizeof (@ftyp @);
2477
+ safe_u_row_count = u_row_count ;
2478
+ safe_vt_column_count = vt_column_count ;
2479
+
2480
+ u_size = safe_u_row_count * safe_m * sizeof (@ftyp @);
2481
+ vt_size = safe_n * safe_vt_column_count * sizeof (@ftyp @);
2463
2482
2464
2483
mem_buff = malloc (a_size + s_size + u_size + vt_size + iwork_size );
2465
2484
@@ -2557,21 +2576,28 @@ init_@lapack_func@(GESDD_PARAMS_t *params,
2557
2576
npy_uint8 * mem_buff = NULL , * mem_buff2 = NULL ;
2558
2577
npy_uint8 * a ,* s , * u , * vt , * work , * rwork , * iwork ;
2559
2578
size_t a_size , s_size , u_size , vt_size , work_size , rwork_size , iwork_size ;
2579
+ size_t safe_u_row_count , safe_vt_column_count ;
2560
2580
fortran_int u_row_count , vt_column_count , work_count ;
2581
+ size_t safe_m = m ;
2582
+ size_t safe_n = n ;
2561
2583
fortran_int min_m_n = m < n ?m :n ;
2584
+ size_t safe_min_m_n = min_m_n ;
2562
2585
2563
2586
if (!compute_urows_vtcolumns (jobz , m , n , & u_row_count , & vt_column_count ))
2564
2587
goto error ;
2565
2588
2566
- a_size = ((size_t )m )* ((size_t )n )* sizeof (@ftyp @);
2567
- s_size = ((size_t )min_m_n )* sizeof (@frealtyp @);
2568
- u_size = ((size_t )u_row_count )* m * sizeof (@ftyp @);
2569
- vt_size = n * ((size_t )vt_column_count )* sizeof (@ftyp @);
2589
+ safe_u_row_count = u_row_count ;
2590
+ safe_vt_column_count = vt_column_count ;
2591
+
2592
+ a_size = safe_m * safe_n * sizeof (@ftyp @);
2593
+ s_size = safe_min_m_n * sizeof (@frealtyp @);
2594
+ u_size = safe_u_row_count * safe_m * sizeof (@ftyp @);
2595
+ vt_size = safe_n * safe_vt_column_count * sizeof (@ftyp @);
2570
2596
rwork_size = 'N' == jobz ?
2571
- 7 * (( size_t ) min_m_n ) :
2572
- (5 * ( size_t ) min_m_n * ( size_t ) min_m_n + 5 * ( size_t ) min_m_n );
2597
+ ( 7 * safe_min_m_n ) :
2598
+ (5 * safe_min_m_n * safe_min_m_n + 5 * safe_min_m_n );
2573
2599
rwork_size *= sizeof (@ftyp @);
2574
- iwork_size = 8 * (( size_t ) min_m_n ) * sizeof (fortran_int );
2600
+ iwork_size = 8 * safe_min_m_n * sizeof (fortran_int );
2575
2601
2576
2602
mem_buff = malloc (a_size +
2577
2603
s_size +
0 commit comments