|
|
178ffb |
From 940d82895512737db2ad6b7698d8d7d140356a7e Mon Sep 17 00:00:00 2001
|
|
|
178ffb |
From: Tim Eves <tim_eves@sil.org>
|
|
|
178ffb |
Date: Thu, 16 Nov 2017 17:12:32 +0700
|
|
|
178ffb |
Subject: [PATCH] Fix memory leaks on realloc failure
|
|
|
178ffb |
|
|
|
178ffb |
Make sure the original buffer is cleaned up if realoc fails.
|
|
|
178ffb |
---
|
|
|
178ffb |
src/Code.cpp | 6 +++++-
|
|
|
178ffb |
src/Pass.cpp | 3 ++-
|
|
|
178ffb |
2 files changed, 7 insertions(+), 2 deletions(-)
|
|
|
178ffb |
|
|
|
178ffb |
diff --git a/src/Code.cpp b/src/Code.cpp
|
|
|
178ffb |
index 92ba923..a5ec04e 100644
|
|
|
178ffb |
--- a/src/Code.cpp
|
|
|
178ffb |
+++ b/src/Code.cpp
|
|
|
178ffb |
@@ -219,7 +219,11 @@ Machine::Code::Code(bool is_constraint, const byte * bytecode_begin, const byte
|
|
|
178ffb |
if (_out)
|
|
|
178ffb |
*_out += total_sz;
|
|
|
178ffb |
else
|
|
|
178ffb |
- _code = static_cast<instr *>(realloc(_code, total_sz));
|
|
|
178ffb |
+ {
|
|
|
178ffb |
+ instr * const old_code = _code;
|
|
|
178ffb |
+ _code = static_cast<instr *>(realloc(_code, total_sz));
|
|
|
178ffb |
+ if (!_code) free(old_code);
|
|
|
178ffb |
+ }
|
|
|
178ffb |
_data = reinterpret_cast<byte *>(_code + (_instr_count+1));
|
|
|
178ffb |
|
|
|
178ffb |
if (!_code)
|
|
|
178ffb |
diff --git a/src/Pass.cpp b/src/Pass.cpp
|
|
|
178ffb |
index ae0e9df..1d45bf8 100644
|
|
|
178ffb |
--- a/src/Pass.cpp
|
|
|
178ffb |
+++ b/src/Pass.cpp
|
|
|
178ffb |
@@ -273,7 +273,9 @@ bool Pass::readRules(const byte * rule_map, const size_t num_entries,
|
|
|
178ffb |
byte * moved_progs = static_cast<byte *>(realloc(m_progs, prog_pool_free - m_progs));
|
|
|
178ffb |
if (e.test(!moved_progs, E_OUTOFMEM))
|
|
|
178ffb |
{
|
|
|
178ffb |
- if (prog_pool_free - m_progs == 0) m_progs = 0;
|
|
|
178ffb |
+ free(m_progs);
|
|
|
178ffb |
+ m_progs = 0;
|
|
|
178ffb |
+ // coverity[leaked_storage : FALSE] - can only get to here if moved_progs is nullptr
|
|
|
178ffb |
return face.error(e);
|
|
|
178ffb |
}
|
|
|
178ffb |
|
|
|
178ffb |
--
|
|
|
178ffb |
2.17.0
|
|
|
178ffb |
|