From 3df045c7e9cb20ef6c5a49367d03568b56c9cb01 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Wed, 31 Aug 2022 19:07:38 +0200
Subject: [PATCH] Make sure the qrtree structure is fully initialized in all
 cases

---
 src/hqr.c      | 1 +
 src/svd.c      | 1 +
 src/systolic.c | 8 +++++---
 src/tphqr.c    | 1 +
 src/tshqr.c    | 1 +
 5 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/hqr.c b/src/hqr.c
index b3d5c95..02c94c0 100644
--- a/src/hqr.c
+++ b/src/hqr.c
@@ -784,6 +784,7 @@ libhqr_initfct_hqr( libhqr_tree_t *qrtree,
 
     minMN = libhqr_imin(A->mt, A->nt);
 
+    memset( qrtree, 0, sizeof( libhqr_tree_t ) );
     qrtree->domino     = domino;
     qrtree->getnbgeqrf = hqr_getnbgeqrf;
     qrtree->getm       = hqr_getm;
diff --git a/src/svd.c b/src/svd.c
index d88a6a1..08a893f 100644
--- a/src/svd.c
+++ b/src/svd.c
@@ -604,6 +604,7 @@ libhqr_initfct_svd( libhqr_tree_t *qrtree,
     p = libhqr_imax( p, 1 );
     minMN = libhqr_imin(A->mt, A->nt);
 
+    memset( qrtree, 0, sizeof( libhqr_tree_t ) );
     qrtree->getnbgeqrf = svd_getnbgeqrf;
     qrtree->getm       = svd_getm;
     qrtree->geti       = svd_geti;
diff --git a/src/systolic.c b/src/systolic.c
index e74fb5d..81410f6 100644
--- a/src/systolic.c
+++ b/src/systolic.c
@@ -392,6 +392,7 @@ libhqr_initfct_sys( libhqr_tree_t         *qrtree,
         return -5;
     }
 
+    memset( qrtree, 0, sizeof( libhqr_tree_t ) );
     qrtree->getnbgeqrf = systolic_getnbgeqrf;
     qrtree->getm       = systolic_getm;
     qrtree->geti       = systolic_geti;
@@ -405,9 +406,10 @@ libhqr_initfct_sys( libhqr_tree_t         *qrtree,
     qrtree->mt    = ( trans == LIBHQR_QR ) ? A->mt : A->nt;
     qrtree->nt    = libhqr_imin( A->mt, A->nt );
 
-    qrtree->a    = libhqr_imax( q, 1 );
-    qrtree->p    = libhqr_imax( p, 1 );
-    qrtree->args = NULL;
+    qrtree->a      = libhqr_imax( q, 1 );
+    qrtree->p      = libhqr_imax( p, 1 );
+    qrtree->domino = 0;
+    qrtree->args   = NULL;
 
     return 0;
 }
diff --git a/src/tphqr.c b/src/tphqr.c
index 7d66431..f9c4e63 100644
--- a/src/tphqr.c
+++ b/src/tphqr.c
@@ -109,6 +109,7 @@ libhqr_initmtx_tphqr( libhqr_tree_t         *qrtree,
         p = libhqr_imax( p, 1 );
     }
 
+    memset( qrtree, 0, sizeof( libhqr_tree_t ) );
     libhqr_rdmtx_initfct( qrtree );
     qrtree->init       = LIBHQR_QRTREE_MTX;
     qrtree->facto      = trans;
diff --git a/src/tshqr.c b/src/tshqr.c
index e096169..2bcbfb4 100644
--- a/src/tshqr.c
+++ b/src/tshqr.c
@@ -60,6 +60,7 @@ libhqr_initmtx_tshqr( libhqr_tree_t         *qrtree,
         return -3;
     }
 
+    memset( qrtree, 0, sizeof( libhqr_tree_t ) );
     libhqr_rdmtx_initfct( qrtree );
     qrtree->init       = LIBHQR_QRTREE_MTX;
     qrtree->facto      = trans;
-- 
GitLab