fix: prevent NULL pointer crash in program_output on popen failure

Signed-off-by: Kevin Vu <vietcgi@gmail.com>
This commit is contained in:
Kevin Vu
2025-10-25 17:01:46 -07:00
committed by poiana
parent 2ddcb51ebf
commit 3dabda4b7d
2 changed files with 14 additions and 2 deletions

View File

@@ -16,12 +16,22 @@ limitations under the License.
*/
#include "outputs_program.h"
#include "logger.h"
#include <stdio.h>
#include <cerrno>
#include <cstring>
void falco::outputs::output_program::open_pfile() {
if(m_pfile == nullptr) {
m_pfile = popen(m_oc.options["program"].c_str(), "w");
if(m_pfile == nullptr) {
falco_logger::log(falco_logger::level::ERR,
"Failed to open program output: " + m_oc.options["program"] +
" (error: " + std::string(std::strerror(errno)) + ")");
return;
}
if(!m_buffered) {
setvbuf(m_pfile, NULL, _IONBF, 0);
}
@@ -31,7 +41,9 @@ void falco::outputs::output_program::open_pfile() {
void falco::outputs::output_program::output(const message *msg) {
open_pfile();
fprintf(m_pfile, "%s\n", msg->msg.c_str());
if(m_pfile != nullptr) {
fprintf(m_pfile, "%s\n", msg->msg.c_str());
}
if(m_oc.options["keep_alive"] != "true") {
cleanup();

View File

@@ -32,7 +32,7 @@ class output_program : public abstract_output {
private:
void open_pfile();
FILE *m_pfile;
FILE *m_pfile = nullptr;
};
} // namespace outputs