From 4f79ca1bf0233ad6c234ec2a4cd3c362e761dcbe Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Thu, 8 Dec 2022 18:02:11 -0700 Subject: [PATCH] Fix ffprobe with special characters (#4646) * Clean path from scpecial characters before running ffprobe * Fix camera paths --- frigate/http.py | 16 ++++++++++++++-- frigate/util.py | 3 ++- web/src/routes/System.jsx | 17 ++++++----------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/frigate/http.py b/frigate/http.py index f5e9eaa7a..5a88385a1 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -1091,7 +1091,19 @@ def ffprobe(): {"success": False, "message": f"Path needs to be provided."}, "404" ) - if "," in clean_camera_user_pass(path_param): + if path_param.startswith("camera"): + camera = path_param[7:] + + if camera not in current_app.frigate_config.cameras.keys(): + return jsonify( + {"success": False, "message": f"{camera} is not a valid camera."}, "404" + ) + + paths = map( + lambda input: input.path, + current_app.frigate_config.cameras[camera].ffmpeg.inputs, + ) + elif "," in clean_camera_user_pass(path_param): paths = path_param.split(",") else: paths = [path_param] @@ -1100,7 +1112,7 @@ def ffprobe(): output = [] for path in paths: - ffprobe = ffprobe_stream(path) + ffprobe = ffprobe_stream(path.strip()) output.append( { "return_code": ffprobe.returncode, diff --git a/frigate/util.py b/frigate/util.py index f7bb8c883..537c17f4b 100755 --- a/frigate/util.py +++ b/frigate/util.py @@ -880,6 +880,7 @@ def get_nvidia_gpu_stats() -> dict[str, str]: def ffprobe_stream(path: str) -> sp.CompletedProcess: """Run ffprobe on stream.""" + clean_path = escape_special_characters(path) ffprobe_cmd = [ "ffprobe", "-print_format", @@ -888,7 +889,7 @@ def ffprobe_stream(path: str) -> sp.CompletedProcess: "stream=codec_long_name,width,height,bit_rate,duration,display_aspect_ratio,avg_frame_rate", "-loglevel", "quiet", - path, + clean_path, ] return sp.run(ffprobe_cmd, capture_output=True) diff --git a/web/src/routes/System.jsx b/web/src/routes/System.jsx index 7da83102e..9f923bbc7 100644 --- a/web/src/routes/System.jsx +++ b/web/src/routes/System.jsx @@ -40,18 +40,9 @@ export default function System() { } setState({ ...state, showFfprobe: true }); - let paths = ''; - config.cameras[camera].ffmpeg.inputs.forEach((input) => { - if (paths) { - paths += ','; - paths += input.path; - } else { - paths = input.path; - } - }); const response = await axios.get('ffprobe', { params: { - paths, + paths: `camera:${camera}`, }, }); @@ -117,7 +108,11 @@ export default function System() {
Vainfo Output - {state.vainfo != '' ?

{state.vainfo}

: } + {state.vainfo != '' ? ( +

{state.vainfo}

+ ) : ( + + )}