From fe7e64fb15abffab071e48af7e8fe012a0c39987 Mon Sep 17 00:00:00 2001
From: Amaury Johnan <amjohnen@gmail.com>
Date: Thu, 6 Jun 2013 20:33:15 +0000
Subject: [PATCH] fix bug invertion

---
 Numeric/fullMatrix.cpp | 8 ++++++--
 Numeric/fullMatrix.h   | 3 ++-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/Numeric/fullMatrix.cpp b/Numeric/fullMatrix.cpp
index 3a73dda16c..eb75fa485a 100644
--- a/Numeric/fullMatrix.cpp
+++ b/Numeric/fullMatrix.cpp
@@ -296,8 +296,12 @@ bool fullMatrix<double>::invert(fullMatrix<double> &result) const
 {
   int M = size1(), N = size2(), lda = size1(), info;
   int *ipiv = new int[std::min(M, N)];
-  if (result._own_data)
-    result.resize(M,N,false);
+  if (result.size2() != M || result.size1() != N) {
+    if (result._own_data || !result._data)
+      result.resize(M,N,false);
+    else
+      Msg::Fatal("FullMatrix: Bad dimension, I cannot write in proxy");
+  }
   result.setAll(*this);
   F77NAME(dgetrf)(&M, &N, result._data, &lda, ipiv, &info);
   if(info == 0){
diff --git a/Numeric/fullMatrix.h b/Numeric/fullMatrix.h
index a5cc2a8b4f..f278fe9836 100644
--- a/Numeric/fullMatrix.h
+++ b/Numeric/fullMatrix.h
@@ -474,7 +474,8 @@ class fullMatrix
     if(resetValue)
       setAll(scalar(0.));
     return false; // no reallocation
-  }  void setAsProxy(const fullMatrix<scalar> &original)
+  }
+  void setAsProxy(const fullMatrix<scalar> &original)
   {
     if(_data && _own_data)
       delete [] _data;
-- 
GitLab