Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 0/4] Get bits buffer end
@ 2025-07-04 13:44 ffmpegagent
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 1/4] avcodec/bytestream: Add const where appropriate Andreas Rheinhardt
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: ffmpegagent @ 2025-07-04 13:44 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: mkver

This patchset eliminates GetBitContext.buffer_end (which is mostly unused).
It therefore automatically fixes the UB that happens upon init_get_bits()
failure (when using pre-C23).

Andreas Rheinhardt (4):
  avcodec/bytestream: Add const where appropriate
  avcodec/vvc/dec: Don't use GetBit-API when byte-aligned
  avcodec/get_bits: Add get_bits_bytesize()
  avcodec/get_bits: Remove GetBitContext.buffer_end

 libavcodec/bitstream.h          |  2 ++
 libavcodec/bitstream_template.h |  8 ++++++++
 libavcodec/bytestream.h         | 16 ++++++++--------
 libavcodec/get_bits.h           | 21 ++++++++++++++++-----
 libavcodec/h263dec.c            |  7 ++++---
 libavcodec/h264_ps.c            |  4 ++--
 libavcodec/hevc/hevcdec.c       |  2 +-
 libavcodec/hevc/ps.c            |  6 +++---
 libavcodec/mpeg12dec.c          |  5 +++--
 libavcodec/vvc/dec.c            | 29 ++++++++++++++++-------------
 10 files changed, 63 insertions(+), 37 deletions(-)


base-commit: 0fe9f25e76163613505f77a8036dc62524070f0a
Published-As: https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-106%2Fmkver%2FGetBits_buffer_end-v1
Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-106/mkver/GetBits_buffer_end-v1
Pull-Request: https://github.com/ffstaging/FFmpeg/pull/106
-- 
ffmpeg-codebot
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 1/4] avcodec/bytestream: Add const where appropriate
  2025-07-04 13:44 [FFmpeg-devel] [PATCH 0/4] Get bits buffer end ffmpegagent
@ 2025-07-04 13:44 ` Andreas Rheinhardt
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 2/4] avcodec/vvc/dec: Don't use GetBit-API when byte-aligned Andreas Rheinhardt
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2025-07-04 13:44 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/bytestream.h | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/libavcodec/bytestream.h b/libavcodec/bytestream.h
index 67080604b9..9c13a2791b 100644
--- a/libavcodec/bytestream.h
+++ b/libavcodec/bytestream.h
@@ -77,11 +77,11 @@ static av_always_inline type bytestream2_get_ ## name(GetByteContext *g)       \
     }                                                                          \
     return bytestream2_get_ ## name ## u(g);                                   \
 }                                                                              \
-static av_always_inline type bytestream2_peek_ ## name ## u(GetByteContext *g) \
+static av_always_inline type bytestream2_peek_ ## name ## u(const GetByteContext *g) \
 {                                                                              \
     return read(g->buffer);                                                    \
 }                                                                              \
-static av_always_inline type bytestream2_peek_ ## name(GetByteContext *g)      \
+static av_always_inline type bytestream2_peek_ ## name(const GetByteContext *g)\
 {                                                                              \
     if (g->buffer_end - g->buffer < bytes)                                     \
         return 0;                                                              \
@@ -155,12 +155,12 @@ static av_always_inline void bytestream2_init_writer(PutByteContext *p,
     p->eof          = 0;
 }
 
-static av_always_inline int bytestream2_get_bytes_left(GetByteContext *g)
+static av_always_inline int bytestream2_get_bytes_left(const GetByteContext *g)
 {
     return g->buffer_end - g->buffer;
 }
 
-static av_always_inline int bytestream2_get_bytes_left_p(PutByteContext *p)
+static av_always_inline int bytestream2_get_bytes_left_p(const PutByteContext *p)
 {
     return p->buffer_end - p->buffer;
 }
@@ -189,22 +189,22 @@ static av_always_inline void bytestream2_skip_p(PutByteContext *p,
     p->buffer += size2;
 }
 
-static av_always_inline int bytestream2_tell(GetByteContext *g)
+static av_always_inline int bytestream2_tell(const GetByteContext *g)
 {
     return (int)(g->buffer - g->buffer_start);
 }
 
-static av_always_inline int bytestream2_tell_p(PutByteContext *p)
+static av_always_inline int bytestream2_tell_p(const PutByteContext *p)
 {
     return (int)(p->buffer - p->buffer_start);
 }
 
-static av_always_inline int bytestream2_size(GetByteContext *g)
+static av_always_inline int bytestream2_size(const GetByteContext *g)
 {
     return (int)(g->buffer_end - g->buffer_start);
 }
 
-static av_always_inline int bytestream2_size_p(PutByteContext *p)
+static av_always_inline int bytestream2_size_p(const PutByteContext *p)
 {
     return (int)(p->buffer_end - p->buffer_start);
 }
-- 
ffmpeg-codebot

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 2/4] avcodec/vvc/dec: Don't use GetBit-API when byte-aligned
  2025-07-04 13:44 [FFmpeg-devel] [PATCH 0/4] Get bits buffer end ffmpegagent
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 1/4] avcodec/bytestream: Add const where appropriate Andreas Rheinhardt
@ 2025-07-04 13:44 ` Andreas Rheinhardt
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 3/4] avcodec/get_bits: Add get_bits_bytesize() Andreas Rheinhardt
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 4/4] avcodec/get_bits: Remove GetBitContext.buffer_end Andreas Rheinhardt
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2025-07-04 13:44 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/vvc/dec.c | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/libavcodec/vvc/dec.c b/libavcodec/vvc/dec.c
index 7930d64a05..90fff3a03f 100644
--- a/libavcodec/vvc/dec.c
+++ b/libavcodec/vvc/dec.c
@@ -20,6 +20,8 @@
  * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
+
+#include "libavcodec/bytestream.h"
 #include "libavcodec/codec_internal.h"
 #include "libavcodec/decode.h"
 #include "libavcodec/hwaccel_internal.h"
@@ -509,13 +511,14 @@ static int slices_realloc(VVCFrameContext *fc)
     return 0;
 }
 
-static int get_ep_size(const H266RawSliceHeader *rsh, GetBitContext *gb, const H2645NAL *nal, const int header_size, const int ep_index)
+static int get_ep_size(const H266RawSliceHeader *rsh, const GetByteContext *gb,
+                       const H2645NAL *nal, const int header_size, const int ep_index)
 {
     int size;
 
     if (ep_index < rsh->num_entry_points) {
         int skipped = 0;
-        int64_t start =  (gb->index >> 3);
+        int64_t start = bytestream2_tell(gb);
         int64_t end = start + rsh->sh_entry_point_offset_minus1[ep_index] + 1;
         while (skipped < nal->skipped_bytes && nal->skipped_bytes_pos[skipped] <= start + header_size) {
             skipped++;
@@ -525,26 +528,27 @@ static int get_ep_size(const H266RawSliceHeader *rsh, GetBitContext *gb, const H
             skipped++;
         }
         size = end - start;
-        size = av_clip(size, 0, get_bits_left(gb) / 8);
+        size = av_clip(size, 0, bytestream2_get_bytes_left(gb));
     } else {
-        size = get_bits_left(gb) / 8;
+        size = bytestream2_get_bytes_left(gb);
     }
     return size;
 }
 
-static int ep_init_cabac_decoder(EntryPoint *ep, GetBitContext *gb, const int size)
+static int ep_init_cabac_decoder(EntryPoint *ep, GetByteContext *gb, const int size)
 {
     int ret;
 
-    av_assert0(gb->buffer + get_bits_count(gb) / 8 + size <= gb->buffer_end);
-    ret = ff_init_cabac_decoder (&ep->cc, gb->buffer + get_bits_count(gb) / 8, size);
+    av_assert0(size <= bytestream2_get_bytes_left(gb));
+    ret = ff_init_cabac_decoder(&ep->cc, gb->buffer, size);
     if (ret < 0)
         return ret;
-    skip_bits(gb, size * 8);
+    bytestream2_skipu(gb, size);
     return 0;
 }
 
-static int ep_init(EntryPoint *ep, const int ctu_addr, const int ctu_end, GetBitContext *gb, const int size)
+static int ep_init(EntryPoint *ep, const int ctu_addr, const int ctu_end,
+                   GetByteContext *gb, const int size)
 {
     const int ret = ep_init_cabac_decoder(ep, gb, size);
 
@@ -567,7 +571,7 @@ static int slice_init_entry_points(SliceContext *sc,
     const H266RawSlice *slice = unit->content_ref;
     int nb_eps                = sh->r->num_entry_points + 1;
     int ctu_addr              = 0;
-    GetBitContext gb;
+    GetByteContext gb;
     int ret;
 
     if (sc->nb_eps != nb_eps) {
@@ -578,9 +582,8 @@ static int slice_init_entry_points(SliceContext *sc,
         sc->nb_eps = nb_eps;
     }
 
-    ret = init_get_bits8(&gb, slice->data, slice->data_size);
-    if (ret < 0)
-        return ret;
+    bytestream2_init(&gb, slice->data, slice->data_size);
+
     for (int i = 0; i < sc->nb_eps; i++)
     {
         const int size    = get_ep_size(sc->sh.r, &gb, nal, slice->header_size, i);
-- 
ffmpeg-codebot

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 3/4] avcodec/get_bits: Add get_bits_bytesize()
  2025-07-04 13:44 [FFmpeg-devel] [PATCH 0/4] Get bits buffer end ffmpegagent
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 1/4] avcodec/bytestream: Add const where appropriate Andreas Rheinhardt
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 2/4] avcodec/vvc/dec: Don't use GetBit-API when byte-aligned Andreas Rheinhardt
@ 2025-07-04 13:44 ` Andreas Rheinhardt
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 4/4] avcodec/get_bits: Remove GetBitContext.buffer_end Andreas Rheinhardt
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2025-07-04 13:44 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>

And use it to avoid accesses to GetBitContext.buffer_end.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/bitstream.h          |  2 ++
 libavcodec/bitstream_template.h |  8 ++++++++
 libavcodec/get_bits.h           | 15 +++++++++++++++
 libavcodec/h263dec.c            |  7 ++++---
 libavcodec/h264_ps.c            |  4 ++--
 libavcodec/hevc/hevcdec.c       |  2 +-
 libavcodec/hevc/ps.c            |  6 +++---
 libavcodec/mpeg12dec.c          |  5 +++--
 8 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h
index 35b7873b9c..e4d96af710 100644
--- a/libavcodec/bitstream.h
+++ b/libavcodec/bitstream.h
@@ -82,6 +82,7 @@
 # define bits_init8         bits_init8_le
 # define bits_tell          bits_tell_le
 # define bits_size          bits_size_le
+# define bits_bytesize      bits_bytesize_le
 # define bits_left          bits_left_le
 # define bits_read_bit      bits_read_bit_le
 # define bits_read_nz       bits_read_nz_le
@@ -111,6 +112,7 @@
 # define bits_init8         bits_init8_be
 # define bits_tell          bits_tell_be
 # define bits_size          bits_size_be
+# define bits_bytesize      bits_bytesize_be
 # define bits_left          bits_left_be
 # define bits_read_bit      bits_read_bit_be
 # define bits_read_nz       bits_read_nz_be
diff --git a/libavcodec/bitstream_template.h b/libavcodec/bitstream_template.h
index bbb8dfa555..773d40ef14 100644
--- a/libavcodec/bitstream_template.h
+++ b/libavcodec/bitstream_template.h
@@ -156,6 +156,14 @@ static inline int BS_FUNC(size)(const BSCTX *bc)
     return bc->size_in_bits;
 }
 
+/**
+ * Return buffer size in bytes.
+ */
+static inline int BS_FUNC(bytesize)(const BSCTX *bc, int round_up)
+{
+    return (bc->size_in_bits + (round_up ? 7 : 0)) >> 3;
+}
+
 /**
  * Return the number of the bits left in a buffer.
  */
diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h
index 1954296569..c64540cf95 100644
--- a/libavcodec/get_bits.h
+++ b/libavcodec/get_bits.h
@@ -76,6 +76,7 @@
 typedef BitstreamContext GetBitContext;
 
 #define get_bits_count      bits_tell
+#define get_bits_bytesize   bits_bytesize
 #define get_bits_left       bits_left
 #define skip_bits_long      bits_skip
 #define skip_bits           bits_skip
@@ -251,6 +252,20 @@ static inline int get_bits_count(const GetBitContext *s)
     return s->index;
 }
 
+/**
+ * Get the size of the GetBitContext's buffer in bytes.
+ *
+ * @param s        the GetBitContext
+ * @param round_up If set, the number of bits will be rounded up to full bytes;
+ *                 this does not matter if the number of bits is known to be
+ *                 a multiple of eight, e.g. if the GetBitContext has been
+ *                 initialized with init_get_bits8.
+ */
+static inline int get_bits_bytesize(const GetBitContext *s, int round_up)
+{
+    return (s->size_in_bits + (round_up ? 7 : 0)) >> 3;
+}
+
 /**
  * Skips the specified number of bits.
  * @param n the number of bits to skip,
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index b2d0f9c409..3821472e91 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -208,7 +208,8 @@ static int decode_slice(H263DecContext *const h)
 
     if (h->c.avctx->hwaccel) {
         const uint8_t *start = h->gb.buffer + get_bits_count(&h->gb) / 8;
-        ret = FF_HW_CALL(h->c.avctx, decode_slice, start, h->gb.buffer_end - start);
+        ret = FF_HW_CALL(h->c.avctx, decode_slice, start,
+                         get_bits_bytesize(&h->gb, 0) - get_bits_count(&h->gb) / 8);
         // ensure we exit decode loop
         h->c.mb_y = h->c.mb_height;
         return ret;
@@ -372,7 +373,7 @@ static int decode_slice(H263DecContext *const h)
     if (h->c.codec_id == AV_CODEC_ID_H263          &&
         (h->c.workaround_bugs & FF_BUG_AUTODETECT) &&
         get_bits_left(&h->gb) >= 64                &&
-        AV_RB64(h->gb.buffer_end - 8) == 0xCDCDCDCDFC7F0000) {
+        AV_RB64(h->gb.buffer + (get_bits_bytesize(&h->gb, 0) - 8)) == 0xCDCDCDCDFC7F0000) {
 
         h->padding_bug_score += 32;
     }
@@ -546,7 +547,7 @@ int ff_h263_decode_frame(AVCodecContext *avctx, AVFrame *pict,
 
     if (avctx->hwaccel) {
         ret = FF_HW_CALL(avctx, start_frame, NULL,
-                         h->gb.buffer, h->gb.buffer_end - h->gb.buffer);
+                         h->gb.buffer, get_bits_bytesize(&h->gb, 0));
         if (ret < 0 )
             return ret;
     }
diff --git a/libavcodec/h264_ps.c b/libavcodec/h264_ps.c
index c698f1b80d..3a3cad7de7 100644
--- a/libavcodec/h264_ps.c
+++ b/libavcodec/h264_ps.c
@@ -294,7 +294,7 @@ int ff_h264_decode_seq_parameter_set(GetBitContext *gb, AVCodecContext *avctx,
     if (!sps)
         return AVERROR(ENOMEM);
 
-    sps->data_size = gb->buffer_end - gb->buffer;
+    sps->data_size = get_bits_bytesize(gb, 1);
     if (sps->data_size > sizeof(sps->data)) {
         av_log(avctx, AV_LOG_DEBUG, "Truncating likely oversized SPS\n");
         sps->data_size = sizeof(sps->data);
@@ -712,7 +712,7 @@ int ff_h264_decode_picture_parameter_set(GetBitContext *gb, AVCodecContext *avct
     if (!pps)
         return AVERROR(ENOMEM);
 
-    pps->data_size = gb->buffer_end - gb->buffer;
+    pps->data_size = get_bits_bytesize(gb, 1);
     if (pps->data_size > sizeof(pps->data)) {
         av_log(avctx, AV_LOG_DEBUG, "Truncating likely oversized PPS "
                "(%"SIZE_SPECIFIER" > %"SIZE_SPECIFIER")\n",
diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c
index 797c9c76c9..21ecf063c5 100644
--- a/libavcodec/hevc/hevcdec.c
+++ b/libavcodec/hevc/hevcdec.c
@@ -2752,7 +2752,7 @@ static int hls_decode_entry(HEVCContext *s, GetBitContext *gb)
     const HEVCPPS   *const pps = s->pps;
     const HEVCSPS   *const sps = pps->sps;
     const uint8_t *slice_data = gb->buffer + s->sh.data_offset;
-    const size_t   slice_size = gb->buffer_end - gb->buffer - s->sh.data_offset;
+    const size_t   slice_size = get_bits_bytesize(gb, 1) - s->sh.data_offset;
     int ctb_size    = 1 << sps->log2_ctb_size;
     int more_data   = 1;
     int x_ctb       = 0;
diff --git a/libavcodec/hevc/ps.c b/libavcodec/hevc/ps.c
index 4b021ea9c1..57125d59c1 100644
--- a/libavcodec/hevc/ps.c
+++ b/libavcodec/hevc/ps.c
@@ -763,7 +763,7 @@ int ff_hevc_decode_nal_vps(GetBitContext *gb, AVCodecContext *avctx,
 {
     int i;
     int vps_id = get_bits(gb, 4);
-    ptrdiff_t nal_size = gb->buffer_end - gb->buffer;
+    ptrdiff_t nal_size = get_bits_bytesize(gb, 1);
     int ret = AVERROR_INVALIDDATA;
     uint64_t layer1_id_included = 0;
     unsigned vps_base_layer_internal_flag, vps_base_layer_available_flag;
@@ -1710,7 +1710,7 @@ int ff_hevc_decode_nal_sps(GetBitContext *gb, AVCodecContext *avctx,
 
     av_log(avctx, AV_LOG_DEBUG, "Decoding SPS\n");
 
-    sps->data_size = gb->buffer_end - gb->buffer;
+    sps->data_size = get_bits_bytesize(gb, 1);
     sps->data = av_memdup(gb->buffer, sps->data_size);
     if (!sps->data) {
         ret = AVERROR(ENOMEM);
@@ -2165,7 +2165,7 @@ int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx,
     const HEVCSPS *sps = NULL;
     const HEVCVPS *vps = NULL;
     int i, ret = 0;
-    ptrdiff_t nal_size = gb->buffer_end - gb->buffer;
+    ptrdiff_t nal_size = get_bits_bytesize(gb, 1);
     unsigned int pps_id = get_ue_golomb_long(gb);
     unsigned log2_parallel_merge_level_minus2;
     HEVCPPS *pps;
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 998f6aa2e5..3ea8d02e1b 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -1635,6 +1635,7 @@ static int slice_decode_thread(AVCodecContext *c, void *arg)
 {
     Mpeg12SliceContext *const s = *(void **) arg;
     const uint8_t *buf  = s->gb.buffer;
+    const uint8_t *end  = buf + get_bits_bytesize(&s->gb, 0);
     int mb_y            = s->c.start_mb_y;
     const int field_pic = s->c.picture_structure != PICT_FRAME;
 
@@ -1644,7 +1645,7 @@ static int slice_decode_thread(AVCodecContext *c, void *arg)
         uint32_t start_code;
         int ret;
 
-        ret = mpeg_decode_slice(s, mb_y, &buf, s->gb.buffer_end - buf);
+        ret = mpeg_decode_slice(s, mb_y, &buf, end - buf);
         emms_c();
         ff_dlog(c, "ret:%d resync:%d/%d mb:%d/%d ts:%d/%d ec:%d\n",
                 ret, s->c.resync_mb_x, s->c.resync_mb_y, s->c.mb_x, s->c.mb_y,
@@ -1666,7 +1667,7 @@ static int slice_decode_thread(AVCodecContext *c, void *arg)
             return 0;
 
         start_code = -1;
-        buf        = avpriv_find_start_code(buf, s->gb.buffer_end, &start_code);
+        buf        = avpriv_find_start_code(buf, end, &start_code);
         if (start_code < SLICE_MIN_START_CODE || start_code > SLICE_MAX_START_CODE)
             return AVERROR_INVALIDDATA;
         mb_y       = start_code - SLICE_MIN_START_CODE;
-- 
ffmpeg-codebot

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 4/4] avcodec/get_bits: Remove GetBitContext.buffer_end
  2025-07-04 13:44 [FFmpeg-devel] [PATCH 0/4] Get bits buffer end ffmpegagent
                   ` (2 preceding siblings ...)
  2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 3/4] avcodec/get_bits: Add get_bits_bytesize() Andreas Rheinhardt
@ 2025-07-04 13:44 ` Andreas Rheinhardt
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2025-07-04 13:44 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>

It is unused. Furthermore, this automatically fixes the issue
that init_get_bits() failure would lead to NULL + 0 (when
setting buffer_end) which is UB before C23. This happened
in the fic-avi and fic-avi-skip_cursor FATE-tests.

This saved 7296B of .text here.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/get_bits.h | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h
index c64540cf95..80a77f0ae3 100644
--- a/libavcodec/get_bits.h
+++ b/libavcodec/get_bits.h
@@ -107,7 +107,7 @@ typedef BitstreamContext GetBitContext;
 #else   // CACHED_BITSTREAM_READER
 
 typedef struct GetBitContext {
-    const uint8_t *buffer, *buffer_end;
+    const uint8_t *buffer;
     int index;
     int size_in_bits;
     int size_in_bits_plus8;
@@ -512,7 +512,6 @@ static inline unsigned int show_bits_long(GetBitContext *s, int n)
 static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer,
                                 int bit_size)
 {
-    int buffer_size;
     int ret = 0;
 
     if (bit_size >= INT_MAX - FFMAX(7, AV_INPUT_BUFFER_PADDING_SIZE*8) || bit_size < 0 || !buffer) {
@@ -521,12 +520,9 @@ static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer,
         ret         = AVERROR_INVALIDDATA;
     }
 
-    buffer_size = (bit_size + 7) >> 3;
-
     s->buffer             = buffer;
     s->size_in_bits       = bit_size;
     s->size_in_bits_plus8 = bit_size + 8;
-    s->buffer_end         = buffer + buffer_size;
     s->index              = 0;
 
     return ret;
-- 
ffmpeg-codebot
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-07-04 13:45 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-07-04 13:44 [FFmpeg-devel] [PATCH 0/4] Get bits buffer end ffmpegagent
2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 1/4] avcodec/bytestream: Add const where appropriate Andreas Rheinhardt
2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 2/4] avcodec/vvc/dec: Don't use GetBit-API when byte-aligned Andreas Rheinhardt
2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 3/4] avcodec/get_bits: Add get_bits_bytesize() Andreas Rheinhardt
2025-07-04 13:44 ` [FFmpeg-devel] [PATCH 4/4] avcodec/get_bits: Remove GetBitContext.buffer_end Andreas Rheinhardt

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git