Skip to content

Commit fb71f8e

Browse files
fix: Resolved a few issues where returns were not being checked or handled properly
Signed-off-by: ethan-thompson <ethan.thompson@networkradius.com>
1 parent c494890 commit fb71f8e

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

src/modules/rlm_linelog/file.c

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,16 +249,16 @@ static void _batch_write(rlm_linelog_file_t *file)
249249
}
250250

251251
done:
252-
if (exfile_close(inst->file.ef, fd) < 0) {
252+
if ((fd >= 0) && (exfile_close(inst->file.ef, fd) < 0)) {
253253
PERROR("Failed closing file %s", file->filename);
254254
}
255255

256256
fr_dbuff_reset_talloc(&file->dbuff);
257257
file->entry_p = file->entry;
258258

259259
if (fr_time_delta_gt(inst->file.buffer_expiry, fr_time_delta_wrap(0))) {
260-
fr_timer_in(file, file->thread_inst->tl, &file->expiry, inst->file.buffer_expiry,
261-
false, _batching_cleanup_timer, file);
260+
MEM(fr_timer_in(file, file->thread_inst->tl, &file->expiry, inst->file.buffer_expiry,
261+
false, _batching_cleanup_timer, file));
262262
}
263263
}
264264

@@ -290,14 +290,20 @@ linelog_buffer_action_t file_enqueue_write(rlm_linelog_file_entry_t **entry_p, m
290290

291291
file->filename = talloc_strdup(file, path);
292292
file->log_header = fr_value_box_alloc_null(file);
293+
294+
if (unlikely(!file->log_header)) {
295+
RPERROR("Failed to allocate log header for buffered log file %pV", call_env->filename);
296+
error:
297+
talloc_free(file);
298+
return LINELOG_BUFFER_WRITE_FAIL;
299+
}
300+
293301
file->mod_inst = inst;
294302
file->thread_inst = thread;
295303

296304
if (call_env->log_head && fr_value_box_copy(file, file->log_header, call_env->log_head) < 0) {
297305
RPERROR("Failed to copy log header for buffered log file %pV", call_env->filename);
298-
error:
299-
talloc_free(file);
300-
return LINELOG_BUFFER_WRITE_FAIL;
306+
goto error;
301307
}
302308

303309
file->entry_p = file->entry;
@@ -337,8 +343,12 @@ linelog_buffer_action_t file_enqueue_write(rlm_linelog_file_entry_t **entry_p, m
337343
*entry_p = file->entry_p;
338344

339345
if (fr_time_delta_gt(inst->file.buffer_delay, fr_time_delta_wrap(0)) && !fr_timer_armed(file->write) ) {
340-
fr_timer_in(file, file->thread_inst->tl, &file->write, inst->file.buffer_delay,
341-
false, _batching_handle_timeout, file);
346+
if (fr_timer_in(file, file->thread_inst->tl, &file->write, inst->file.buffer_delay,
347+
false, _batching_handle_timeout, file)) {
348+
RPERROR("Failed to insert timer for buffered log file %pV", call_env->filename);
349+
file->entry_p->failed = true;
350+
return LINELOG_BUFFER_WRITE_FAIL;
351+
}
342352
}
343353

344354
file->entry_p->data_len = ret;

0 commit comments

Comments
 (0)