if (ctx->pts == AV_NOPTS_VALUE)
ctx->pts = s->pts;
s->pts = AV_NOPTS_VALUE;
- } else {
+ } else if (ctx->pts != AV_NOPTS_VALUE) {
s->pts = ctx->pts;
ctx->pts = AV_NOPTS_VALUE;
}
while (n_frames--) { \
unsigned sz = rd; \
idx += a; \
- if (sz > size) { \
+ if (sz == 0 || sz > size) { \
s->n_frames = 0; \
*out_size = size; \
*out_data = data; \
av_log(avctx, AV_LOG_ERROR, \
- "Superframe packet size too big: %u > %d\n", \
+ "Invalid superframe packet size: %u frame size: %d\n", \
sz, size); \
return full_size; \
} \
size -= sz; \
} \
parse_frame(ctx, *out_data, *out_size); \
- return *out_size
+ return s->n_frames > 0 ? *out_size : full_size
case_n(1, *idx);
case_n(2, AV_RL16(idx));