Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[BUG] `avc_ctx->cc_count` is `uint8_t`/`u8`, wrapping around when H.264 access units accumulate multiple SEIs beyond 255 triplets

Abierto
#2,379 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
62/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
c, rust
Área
backend

Línea de trabajo

The counter is declared as unsigned char cc_count in src/lib_ccx/avc_functions.h and updated in copy_ccdata_to_buffer in src/lib_ccx/avc_functions.c, and the Rust mirror is the u8 field in src/rust/src/avc/common_types.rs. Start by reading copy_ccdata_to_buffer to see how cc_count indexes the buffer and what the MAX_CC_COUNT and HDCC_MAX_TRIPLETS_PER_SLOT limits assume. Done means the count type can hold 310 triplets on both sides, the two definitions agree, and the buffer bounds check still holds.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

CCExtractor version: master (post-#2359 / commit c1043ca7)

Necessary information

  • Is this a regression (i.e. did it work before)? NO
  • What platform did you use? All (Linux / macOS / Windows)
  • What were the used arguments? Standard H.264 / MPEG-TS extraction (ccextractor input.ts)

Summary

In commit c1043ca7 (#2359), MAX_CC_COUNT and HDCC_MAX_TRIPLETS_PER_SLOT were raised from 31 to 310 so that H.264 access units carrying multiple SEI messages can buffer all their caption triplets without discarding the frame.

However, avc_ctx->cc_count is typed as unsigned char in C (src/lib_ccx/avc_functions.h:6) and u8 in Rust (src/rust/src/avc/common_types.rs:7). Because an 8-bit unsigned integer caps out at 255, the buffer accumulator wraps around whenever an access unit carries dense or multiple SEI packets totaling between 256 and 310 triplets.

Root Cause Analysis

1. In C (src/lib_ccx/avc_functions.c:442-453):
struct avc_ctx
{
    unsigned char cc_count;  // <--- uint8_t: range 0..255
    unsigned char *cc_data;
    ...
};

void copy_ccdata_to_buffer(struct avc_ctx *ctx, char *source, int new_cc_count)
{
    ...
    memcpy(ctx->cc_data + ctx->cc_count * 3, source, new_cc_count * 3 + 1);
    ctx->cc_count += new_cc_count; // <--- Wraps modulo 256 on overflow
    ctx->cc_buffer_saved = CCX_FALSE;
}
Lenguaje dominante
C
Estrellas
908
Forks
595
Merge medio
3 d 23 h
PR fusionados (30 d)
32

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de CCExtractor/ccextractor

Todos los issues de CCExtractor/ccextractor

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.