Fix TensorVariant deletion test (#451)
authorVladimir Plazun/AI Tools Lab /SRR/Engineer/삼성전자 <v.plazun@partner.samsung.com>
Tue, 3 Jul 2018 12:33:51 +0000 (16:33 +0400)
committerSergey Vostokov/AI Tools Lab /SRR/Staff Engineer/삼성전자 <s.vostokov@samsung.com>
Tue, 3 Jul 2018 12:33:51 +0000 (21:33 +0900)
Fix use-after-free in TensorVariant.DeletionTest( raw_indicator used after beeing deleted )

Signed-off-by: Vladimir Plazun <v.plazun@partner.samsung.com>
contrib/nnc/libs/core/src/core/linalg/TensorVariant.test.cpp

index 720a135..96e3282 100644 (file)
@@ -33,7 +33,7 @@ TEST(TensorVariant, DeletionTest) {
     Indicator() : val(true) {
     }
 
-    ~Indicator() {
+    void reset() {
       val = false;
     }
 
@@ -44,7 +44,7 @@ TEST(TensorVariant, DeletionTest) {
   auto raw_indicator = new Indicator[1];
   {
     Shape shape{1,1};
-    auto mem = std::shared_ptr<Indicator>(raw_indicator, [](Indicator*& p){ delete[] p; });
+    auto mem = std::shared_ptr<Indicator>(raw_indicator, [](Indicator*& p){ p[0].reset(); });
     t = new TensorVariant(shape, mem, TensorVariant::DTYPE::UNKNOWN);
     //mem gets destroyed here
   }
@@ -52,4 +52,5 @@ TEST(TensorVariant, DeletionTest) {
   ASSERT_EQ(raw_indicator->val, true);
   delete t;
   ASSERT_EQ(raw_indicator->val, false);
+  delete[] raw_indicator;
 }