PR #24180 opened by mkver
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24180
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24180.patch

Also use ff_data_to_hex() in smoothstreamingenc.


>From 4213c1d24c72b10c106e1c9f0e37082eee2c0bbf Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Mon, 17 Aug 2026 03:56:47 +0200
Subject: [PATCH 1/4] avformat/shared: Don't log incomplete lines

Incomplete lines (without \n) may be torn apart by av_log()s
from other threads. So log them once. Also use ff_data_to_hex()
for the data->hex conversion.

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavformat/shared.c | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/libavformat/shared.c b/libavformat/shared.c
index 5fd01b185e..fbe86ff1dc 100644
--- a/libavformat/shared.c
+++ b/libavformat/shared.c
@@ -32,6 +32,7 @@
 #include "libavutil/opt.h"
 #include "libavutil/time.h"
 
+#include "internal.h"
 #include "url.h"
 
 #include <errno.h>
@@ -519,13 +520,14 @@ static int spacemap_init(URLContext *h, const uint8_t 
hash[HASH_SIZE])
         ret = set_once_uchar(&s->spacemap->hash[i], hash[i]);
         if (ret < 0) {
             av_log(h, AV_LOG_ERROR, "Shared cache spacemap hash mismatch!\n");
-            av_log(h, AV_LOG_ERROR, "  Expected hash: ");
-            for (int j = 0; j < 32; j++)
-                av_log(h, AV_LOG_ERROR, "%02X", hash[j]);
-            av_log(h, AV_LOG_ERROR, "\n  Got      hash: ");
-            for (int j = 0; j < 32; j++)
-                av_log(h, AV_LOG_ERROR, "%02X", 
atomic_load(&s->spacemap->hash[j]));
-            av_log(h, AV_LOG_ERROR, "\n");
+            char hash_hex[2 * HASH_SIZE + 1];
+            ff_data_to_hex(hash_hex, hash, HASH_SIZE, 0);
+            av_log(h, AV_LOG_ERROR, "  Expected hash: %s\n", hash_hex);
+            uint8_t hash2[HASH_SIZE];
+            for (int j = 0; j < HASH_SIZE; ++j)
+                hash2[j] = atomic_load_explicit(&s->spacemap->hash[j], 
memory_order_relaxed);
+            ff_data_to_hex(hash_hex, hash2, HASH_SIZE, 0);
+            av_log(h, AV_LOG_ERROR, "  Got      hash: %s\n", hash_hex);
             return ret;
         }
     }
-- 
2.52.0


>From 17670f87a5ddb138d03376671cb995b242cc7a8d Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Mon, 17 Aug 2026 04:13:26 +0200
Subject: [PATCH 2/4] avformat/ape: Don't log incomplete lines

Incomplete lines (without \n) may be torn apart by av_log()s
from other threads. So log them once. Also use ff_data_to_hex()
for the data->hex conversion.

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavformat/ape.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/libavformat/ape.c b/libavformat/ape.c
index d2fd62902c..3bf359cb1f 100644
--- a/libavformat/ape.c
+++ b/libavformat/ape.c
@@ -107,10 +107,9 @@ static void ape_dumpinfo(AVFormatContext * s, APEContext * 
ape_ctx)
     av_log(s, AV_LOG_DEBUG, "audiodatalength      = %"PRIu32"\n", 
ape_ctx->audiodatalength);
     av_log(s, AV_LOG_DEBUG, "audiodatalength_high = %"PRIu32"\n", 
ape_ctx->audiodatalength_high);
     av_log(s, AV_LOG_DEBUG, "wavtaillength        = %"PRIu32"\n", 
ape_ctx->wavtaillength);
-    av_log(s, AV_LOG_DEBUG, "md5                  = ");
-    for (i = 0; i < 16; i++)
-         av_log(s, AV_LOG_DEBUG, "%02x", ape_ctx->md5[i]);
-    av_log(s, AV_LOG_DEBUG, "\n");
+    char md5_hex[sizeof(ape_ctx->md5) * 2 + 1];
+    ff_data_to_hex(md5_hex, ape_ctx->md5, sizeof(ape_ctx->md5), 1);
+    av_log(s, AV_LOG_DEBUG, "md5                  = %s\n", md5_hex);
 
     av_log(s, AV_LOG_DEBUG, "\nHeader Block:\n\n");
 
-- 
2.52.0


>From ffe22e37364e4010cf8238188a826f63d57b1e9e Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Mon, 17 Aug 2026 12:03:20 +0200
Subject: [PATCH 3/4] avformat/utils: Make ff_data_to_hex() usable with sizes >
 INT_MAX/2

It uses an int size field, so it should support the whole range.
Notice that no current caller could ever have been affected by this.

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavformat/utils.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libavformat/utils.c b/libavformat/utils.c
index cb0ae7444e..dabd958397 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -473,11 +473,12 @@ char *ff_data_to_hex(char *buff, const uint8_t *src, int 
s, int lowercase)
                                            'c', 'd', 'e', 'f' };
     const char *hex_table = lowercase ? hex_table_lc : hex_table_uc;
 
-    for (int i = 0; i < s; i++) {
+    av_assume(s >= 0);
+    for (unsigned i = 0; i < s; i++) {
         buff[i * 2]     = hex_table[src[i] >> 4];
         buff[i * 2 + 1] = hex_table[src[i] & 0xF];
     }
-    buff[2 * s] = '\0';
+    buff[2U * s] = '\0';
 
     return buff;
 }
-- 
2.52.0


>From 7228890b4192a67c5e4a593cde06b4f4a378ff0e Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <[email protected]>
Date: Mon, 17 Aug 2026 12:34:57 +0200
Subject: [PATCH 4/4] avformat/smoothstreamingenc: Use ff_data_to_hex() where
 advantageous

Signed-off-by: Andreas Rheinhardt <[email protected]>
---
 libavformat/smoothstreamingenc.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/libavformat/smoothstreamingenc.c b/libavformat/smoothstreamingenc.c
index 3a4c1e0413..118761bfc0 100644
--- a/libavformat/smoothstreamingenc.c
+++ b/libavformat/smoothstreamingenc.c
@@ -142,7 +142,7 @@ static void get_private_data(OutputStream *os)
     AVCodecParameters *par = os->ctx->streams[0]->codecpar;
     uint8_t *ptr = par->extradata;
     int size = par->extradata_size;
-    int i;
+
     if (par->codec_id == AV_CODEC_ID_H264) {
         ff_avc_write_annexb_extradata(ptr, &ptr, &size);
         if (!ptr)
@@ -150,11 +150,10 @@ static void get_private_data(OutputStream *os)
     }
     if (!ptr)
         return;
-    os->private_str = av_mallocz(2*size + 1);
+    os->private_str = av_malloc(2U*size + 1);
     if (!os->private_str)
         goto fail;
-    for (i = 0; i < size; i++)
-        snprintf(&os->private_str[2*i], 3, "%02x", ptr[i]);
+    ff_data_to_hex(os->private_str, ptr, size, 1);
 fail:
     if (ptr != par->extradata)
         av_free(ptr);
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to