From 20f3ba90a0ad1701bd73e5cd856fff1fc34a092c Mon Sep 17 00:00:00 2001 From: MrDave Date: Wed, 15 Oct 2025 10:55:58 -0700 Subject: [PATCH] Quote and escape script commands --- src/util.cpp | 31 ++++++++++++++++++++++++++++++- src/util.hpp | 1 + 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/util.cpp b/src/util.cpp index 35ee6c74..cb801441 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -134,6 +134,29 @@ void myunquote(std::string &parm) } +/* Enclose and escape with single quotes */ +void myescquote(std::string &parm) +{ + size_t plen, loc; + std::string tparm; + + mytrim(parm); + + plen = parm.length(); + tparm ="'"; + loc = 0; + while (loc < plen) { + if (parm.substr(loc,1)== "'") { + tparm += "'\''"; + } else { + tparm += parm.substr(loc,1); + } + loc++; + } + tparm += "'"; + parm = tparm; +} + /** mymalloc */ void *mymalloc(size_t nbytes) { @@ -669,16 +692,20 @@ AVPacket *mypacket_alloc(AVPacket *pkt) void util_exec_command(cls_camera *cam, const char *command, const char *filename) { char stamp[PATH_MAX]; + std::string dst; int pid; mystrftime(cam, stamp, sizeof(stamp), command, filename); + dst = stamp; + myescquote(dst); + pid = fork(); if (!pid) { /* Detach from parent */ setsid(); - execl("/bin/sh", "sh", "-c", stamp, " &",(char*)NULL); + execl("/bin/sh", "sh", "-c", dst.c_str(), " &",(char*)NULL); /* if above function succeeds the program never reach here */ MOTION_LOG(ALR, TYPE_EVENTS, SHOW_ERRNO @@ -703,6 +730,8 @@ void util_exec_command(cls_camera *cam, std::string cmd) mystrftime(cam, dst, cmd, ""); + myescquote(dst); + pid = fork(); if (!pid) { /* Detach from parent */ diff --git a/src/util.hpp b/src/util.hpp index a5b69855..90abf3e0 100644 --- a/src/util.hpp +++ b/src/util.hpp @@ -101,6 +101,7 @@ struct ctx_params { void myrtrim(std::string &parm); void mytrim(std::string &parm); void myunquote(std::string &parm); + void myescquote(std::string &parm); void myframe_key(AVFrame *frame); void myframe_interlaced(AVFrame *frame);