The branch, master has been updated
via 0ae8df5f2ceea82337a2456ef16f930faf160189 (commit)
via a5cc0e5c9e752f98e38c2a95a0893faeb1f78fa9 (commit)
via 9bc3c572eaaab559a7258c392528e7a1cad2a9b7 (commit)
from 551e964e8ab1bc0712f279d64e86b4e65ec90200 (commit)
- Log -----------------------------------------------------------------
commit 0ae8df5f2ceea82337a2456ef16f930faf160189
Author: Zhao Zhili <[email protected]>
AuthorDate: Fri Nov 14 17:23:22 2025 +0800
Commit: Zhao Zhili <[email protected]>
CommitDate: Wed Nov 19 17:46:06 2025 +0000
avutil/common: cast GET_BYTE/GET_16BIT returned value
In case of GET_BYTE/GET_16BIT return signed value.
diff --git a/libavutil/common.h b/libavutil/common.h
index 3b830daf30..bf23aa50b0 100644
--- a/libavutil/common.h
+++ b/libavutil/common.h
@@ -486,13 +486,13 @@ static av_always_inline av_const int av_parity_c(uint32_t
v)
* to prevent undefined results.
*/
#define GET_UTF8(val, GET_BYTE, ERROR)\
- val= (GET_BYTE);\
+ val= (uint8_t)(GET_BYTE);\
{\
uint32_t top = (val & 128) >> 1;\
if ((val & 0xc0) == 0x80 || val >= 0xFE)\
{ERROR}\
while (val & top) {\
- unsigned int tmp = (GET_BYTE) - 128;\
+ unsigned int tmp = (uint8_t)(GET_BYTE) - 128;\
if(tmp>>6)\
{ERROR}\
val= (val<<6) + tmp;\
@@ -511,11 +511,11 @@ static av_always_inline av_const int av_parity_c(uint32_t
v)
* typically a goto statement.
*/
#define GET_UTF16(val, GET_16BIT, ERROR)\
- val = (GET_16BIT);\
+ val = (uint16_t)(GET_16BIT);\
{\
unsigned int hi = val - 0xD800;\
if (hi < 0x800) {\
- val = (GET_16BIT) - 0xDC00;\
+ val = (uint16_t)(GET_16BIT) - 0xDC00;\
if (val > 0x3FFU || hi > 0x3FFU)\
{ERROR}\
val += (hi<<10) + 0x10000;\
commit a5cc0e5c9e752f98e38c2a95a0893faeb1f78fa9
Author: Zhao Zhili <[email protected]>
AuthorDate: Fri Nov 14 16:53:07 2025 +0800
Commit: Zhao Zhili <[email protected]>
CommitDate: Wed Nov 19 17:46:06 2025 +0000
avfilter/vf_drawtext: fix call GET_UTF8 with invalid argument
For GET_UTF8(val, GET_BYTE, ERROR), val has type of uint32_t,
GET_BYTE must return an unsigned integer, otherwise signed
extension happened due to val= (GET_BYTE), and GET_UTF8 went to
the error path.
This bug incidentally cancelled the bug where hb_buffer_add_utf8
was being called with incorrect argument, allowing drawtext to
function correctly on x86 and macOS ARM, which defined char as
signed. However, on Linux and Android ARM environments, because
char is unsigned by default, GET_UTF8 now returns the correct
return, which unexpectedly revealed issue #20906.
diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
index c0400b8272..2812de37f5 100644
--- a/libavfilter/vf_drawtext.c
+++ b/libavfilter/vf_drawtext.c
@@ -1395,7 +1395,7 @@ static int measure_text(AVFilterContext *ctx, TextMetrics
*metrics)
{
DrawTextContext *s = ctx->priv;
char *text = s->expanded_text.str;
- char *textdup = NULL, *start = NULL;
+ char *textdup = NULL;
int width64 = 0, w64 = 0;
int cur_min_y64 = 0, first_max_y64 = -32000;
int first_min_x64 = 32000, last_max_x64 = -32000;
@@ -1405,7 +1405,7 @@ static int measure_text(AVFilterContext *ctx, TextMetrics
*metrics)
Glyph *glyph = NULL;
int i, tab_idx = 0, last_tab_idx = 0, line_offset = 0;
- char* p;
+ uint8_t *start, *p;
int ret = 0;
// Count the lines and the tab characters
commit 9bc3c572eaaab559a7258c392528e7a1cad2a9b7
Author: Zhao Zhili <[email protected]>
AuthorDate: Fri Nov 14 16:23:10 2025 +0800
Commit: Zhao Zhili <[email protected]>
CommitDate: Wed Nov 19 17:46:06 2025 +0000
avfilter/vf_drawtext: fix incorrect text length
From the doc of HarfBuzz, what hb_buffer_add_utf8 needs is the
number of bytes, not Unicode character:
hb_buffer_add_utf8(buf, text, strlen(text), 0, strlen(text));
Fix issue #20906.
diff --git a/libavfilter/vf_drawtext.c b/libavfilter/vf_drawtext.c
index 1d23805b54..c0400b8272 100644
--- a/libavfilter/vf_drawtext.c
+++ b/libavfilter/vf_drawtext.c
@@ -1396,7 +1396,6 @@ static int measure_text(AVFilterContext *ctx, TextMetrics
*metrics)
DrawTextContext *s = ctx->priv;
char *text = s->expanded_text.str;
char *textdup = NULL, *start = NULL;
- int num_chars = 0;
int width64 = 0, w64 = 0;
int cur_min_y64 = 0, first_max_y64 = -32000;
int first_min_x64 = 32000, last_max_x64 = -32000;
@@ -1459,7 +1458,7 @@ continue_on_failed2:
TextLine *cur_line = &s->lines[line_count];
HarfbuzzData *hb = &cur_line->hb_data;
cur_line->cluster_offset = line_offset;
- ret = shape_text_hb(s, hb, start, num_chars);
+ ret = shape_text_hb(s, hb, start, p - start);
if (ret != 0) {
goto done;
}
@@ -1517,14 +1516,12 @@ continue_on_failed2:
if (w64 > width64) {
width64 = w64;
}
- num_chars = -1;
start = p;
++line_count;
line_offset = i + 1;
}
if (code == 0) break;
- ++num_chars;
}
metrics->line_height64 = s->face->size->metrics.height;
-----------------------------------------------------------------------
Summary of changes:
libavfilter/vf_drawtext.c | 9 +++------
libavutil/common.h | 8 ++++----
2 files changed, 7 insertions(+), 10 deletions(-)
hooks/post-receive
--
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]