You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.9 KiB
78 lines
2.9 KiB
From a93c17b054313f8ce0b0474942177a3aa646893b Mon Sep 17 00:00:00 2001 |
|
From: Mamoru TASAKA <mtasaka@fedoraproject.org> |
|
Date: Mon, 28 Dec 2020 15:29:41 +0900 |
|
Subject: [PATCH 5/6] recanim.c: fix up -Wformat-overflow warning: |
|
|
|
From gcc11 -Wall: |
|
-------------------------------------------------------------- |
|
../../hacks/recanim.c: In function 'screenhack_record_anim_free': |
|
../../hacks/recanim.c:435:12: warning: '%s' directive writing up to 1023 bytes into a region of size 968 [-Wformat-overflow=] |
|
435 | " -c:v libx264" |
|
| ^~~~~~~~~~~~~~~ |
|
...... |
|
442 | fn); |
|
| ~~ |
|
../../hacks/recanim.c:439:15: note: format string is defined here |
|
439 | " '%s'" |
|
| ^~ |
|
-------------------------------------------------------------- |
|
|
|
To silence this warning, calculate the size of the string which is "supposed to be" |
|
written and if the size is going to be oversized, exit abnormally. |
|
--- |
|
hacks/recanim.c | 14 ++++++++++---- |
|
1 file changed, 10 insertions(+), 4 deletions(-) |
|
|
|
diff --git a/hacks/recanim.c b/hacks/recanim.c |
|
index b1c7e0a..bf9084c 100644 |
|
--- a/hacks/recanim.c |
|
+++ b/hacks/recanim.c |
|
@@ -391,6 +391,7 @@ screenhack_record_anim_free (record_anim_state *st) |
|
const char *type = "png"; |
|
char cmd[1024]; |
|
char fn[1024]; |
|
+ size_t len_cmd; |
|
const char *soundtrack = 0; |
|
|
|
fprintf (stderr, "%s: wrote %d frames\n", progname, st->frame_count); |
|
@@ -417,7 +418,8 @@ screenhack_record_anim_free (record_anim_state *st) |
|
if (! soundtrack) soundtrack = "../../" ST; |
|
if (stat (soundtrack, &s)) soundtrack = 0; |
|
|
|
- sprintf (cmd, |
|
+ len_cmd = 0; |
|
+ len_cmd += snprintf (cmd, sizeof cmd - len_cmd, |
|
"ffmpeg" |
|
" -hide_banner" |
|
" -loglevel error" |
|
@@ -425,13 +427,16 @@ screenhack_record_anim_free (record_anim_state *st) |
|
" -i '%s-%%06d.%s'" |
|
" -r %d", /* rate of output: must be after -i */ |
|
st->fps, progname, type, st->fps); |
|
- if (soundtrack) |
|
- sprintf (cmd + strlen(cmd), |
|
+ if (len_cmd >= sizeof cmd) abort(); |
|
+ if (soundtrack) { |
|
+ len_cmd += snprintf (cmd + len_cmd, sizeof cmd - len_cmd, |
|
" -i '%s' -map 0:v:0 -map 1:a:0 -acodec aac" |
|
/* Truncate or pad audio to length of video */ |
|
" -filter_complex '[1:0] apad' -shortest", |
|
soundtrack); |
|
- sprintf (cmd + strlen(cmd), |
|
+ if (len_cmd >= sizeof cmd) abort(); |
|
+ } |
|
+ len_cmd += snprintf (cmd + len_cmd, sizeof cmd - len_cmd, |
|
" -c:v libx264" |
|
" -profile:v high" |
|
" -crf 18" |
|
@@ -440,6 +445,7 @@ screenhack_record_anim_free (record_anim_state *st) |
|
" </dev/null" |
|
/*" 2>&-"*/, |
|
fn); |
|
+ if (len_cmd >= sizeof cmd) abort(); |
|
fprintf (stderr, "%s: exec: %s\n", progname, cmd); |
|
/* Use empty body to kill warning from gcc -Wall with |
|
"warning: ignoring return value of 'system', |
|
-- |
|
2.29.2 |
|
|
|
|