1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
From: Stephen Sinclair <radarsat1@gmail.com>
Date: Wed, 11 Sep 2022 11:41:00 +0000
Subject: Fix crash in QPConvex test
From a commit of upstream repository after release.
commit 88e449bd1ad9ebcbcae2e3d466656d82efdc42c2
Author: Maurice Bremond <Maurice.Bremond@inria.fr>
Date: Mon Sep 12 10:50:32 2022 +0200
[numerics] add some version check & clear on top of some NM_*
diff --git a/numerics/src/tools/NumericsMatrix.c b/numerics/src/tools/NumericsMatrix.c
index a957e4726..6beeb757b 100644
--- a/numerics/src/tools/NumericsMatrix.c
+++ b/numerics/src/tools/NumericsMatrix.c
@@ -2881,7 +2881,18 @@ NumericsSparseMatrix* numericsSparseMatrix(NumericsMatrix* A)
CSparseMatrix* NM_triplet(NumericsMatrix* A)
{
+ assert(A);
+
+ if(numericsSparseMatrix(A)->triplet && (NM_max_version(A) >
+ NSM_version(numericsSparseMatrix(A),
+ NSM_TRIPLET)))
+ {
+ NM_clearTriplet(A);
+ }
+
if(!numericsSparseMatrix(A)->triplet)
+// ||
+// NSM_version(numericsSparseMatrix(A), NSM_TRIPLET) < NSM_max_version(numericsSparseMatrix(A)))
{
switch(A->storageType)
{
@@ -2996,6 +3007,16 @@ CSparseMatrix* NM_triplet(NumericsMatrix* A)
CSparseMatrix* NM_half_triplet(NumericsMatrix* A)
{
+ assert(A);
+
+ if(numericsSparseMatrix(A)->half_triplet &&
+ (NM_max_version(A) >
+ NSM_version(numericsSparseMatrix(A),
+ NSM_HALF_TRIPLET)))
+ {
+ NM_clearHalfTriplet(A);
+ }
+
if(!numericsSparseMatrix(A)->half_triplet)
{
switch(A->storageType)
@@ -3113,6 +3134,13 @@ CSparseMatrix* NM_csc(NumericsMatrix *A)
DEBUG_BEGIN("NM_csc(NumericsMatrix *A)\n");
assert(A);
+ if(numericsSparseMatrix(A)->csc && (NM_max_version(A) >
+ NSM_version(numericsSparseMatrix(A),
+ NSM_CSC)))
+ {
+ NM_clearCSC(A);
+ }
+
if(!numericsSparseMatrix(A)->csc)
{
assert(A->matrix2);
@@ -3184,6 +3212,13 @@ CSparseMatrix* NM_csr(NumericsMatrix *A)
{
assert(A);
+ if(numericsSparseMatrix(A)->csr && (NM_max_version(A) >
+ NSM_version(numericsSparseMatrix(A),
+ NSM_CSR)))
+ {
+ NM_clearCSR(A);
+ }
+
if(!numericsSparseMatrix(A)->csr)
{
assert(A->matrix2);
|