Skip to content

Commit ec1112c

Browse files
Wenfeng LiuFelipe Zimmerle
authored andcommitted
Fix memory leak in AuditLog::init()
1 parent 8c549c6 commit ec1112c

File tree

1 file changed

+27
-9
lines changed

1 file changed

+27
-9
lines changed

src/audit_log/audit_log.cc

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -209,42 +209,60 @@ bool AuditLog::setType(AuditLogType audit_type) {
209209

210210

211211
bool AuditLog::init(std::string *error) {
212+
audit_log::writer::Writer *tmp_writer;
213+
214+
if (m_status == OffAuditLogStatus || m_status == NotSetLogStatus) {
215+
if (m_writer) {
216+
delete m_writer;
217+
m_writer = NULL;
218+
}
219+
return true;
220+
}
221+
212222
if (m_type == ParallelAuditLogType) {
213-
m_writer = new audit_log::writer::Parallel(this);
223+
tmp_writer = new audit_log::writer::Parallel(this);
214224
} else if (m_type == HttpsAuditLogType) {
215-
m_writer = new audit_log::writer::Https(this);
225+
tmp_writer = new audit_log::writer::Https(this);
216226
} else {
217227
/*
218228
* if (m_type == SerialAuditLogType
219229
* || m_type == NotSetAuditLogType)
220230
*
221231
*/
222-
m_writer = new audit_log::writer::Serial(this);
232+
tmp_writer = new audit_log::writer::Serial(this);
223233
}
224234

225-
if (m_status == OffAuditLogStatus || m_status == NotSetLogStatus) {
226-
return true;
235+
if (tmp_writer == NULL) {
236+
error->assign("Writer memory alloc failed!");
237+
return false;
227238
}
228239

229-
if (m_writer == NULL || m_writer->init(error) == false) {
240+
if (tmp_writer->init(error) == false) {
241+
delete tmp_writer;
230242
return false;
231243
}
232244

233245
/* Sanity check */
234246
if (m_status == RelevantOnlyAuditLogStatus) {
235247
if (m_relevant.empty()) {
236248
/*
237-
error->assign("m_relevant cannot be null while status is set to " \
249+
error->assign("m_relevant cannot be null while status is set to " \
238250
"RelevantOnly");
239-
return false;
240-
*/
251+
return false;
252+
*/
241253
// FIXME: this should be a warning. There is not point to
242254
// have the logs on relevant only if nothing is relevant.
243255
//
244256
// Not returning an error to keep the compatibility with v2.
245257
}
246258
}
247259

260+
if (m_writer) {
261+
delete m_writer;
262+
}
263+
264+
m_writer = tmp_writer;
265+
248266
return true;
249267
}
250268

0 commit comments

Comments
 (0)