From patchwork Sat Jun 8 23:10:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 49709 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:c209:0:b0:460:55fa:d5ed with SMTP id d9csp1781634vqo; Sat, 8 Jun 2024 16:10:58 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX+D7PL4kbbHlBHahHduwmLR9aqZhU9TSUy3Ky2JttTdfHr913OP0OgRwCXm9Dlr1REw5iB0TvD19YvIPDifw7ZJ1IuCGKcOJiFAA== X-Google-Smtp-Source: AGHT+IHxnLawcdkbRCff6A1NMIQtCevXH2s6ff4o3UsyxYWPkz3Mk+0Hinif00NAyZCLEok6UVhn X-Received: by 2002:a50:c047:0:b0:572:2efe:4d14 with SMTP id 4fb4d7f45d1cf-57c4dee1736mr4949560a12.10.1717888258525; Sat, 08 Jun 2024 16:10:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1717888258; cv=none; d=google.com; s=arc-20160816; b=yDIEufgAH+V549TstVykde3NpvBDlkPmQ/iHcKL8L14ltI0MHXOo13ZcILhsHklowc QZMSL3j3TrIqYTD6gcHFgj0jf3/aXk89dIiZfeECQp+HVKSB37e6NIlwYE+1di44p6kM oG97XbD/Uh5lahZ8APEFdNYwM+sWhFGe0wcVPH1UXJyl8912EiXuGNWwDHYH/tpr0+c1 7E48wnIvfxd7UoWluBuSTBroSOh69kS79+A6KE8FwUnC5opvn5YuHRpGvKluSsK00rav mwJV5WQKtS3Sw1BIBxgGlmDTC6RGIWSqqUAnmO0nrnpZZYk7ROX0YVNBG1RjEb0u/+Na DJ8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=3wIYs2DzNIFab7w6k51I9wiWTe8j4ZdvYAkZt/cvHIA=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=Sgydc4H3MIX/XR41wD0bXRfS/T3pNlYl86W06mp2YzXsLHQao8of+LndL3iVg3jwE9 d2d3KDfK5N9re6xNYTxpF/g74MJSGJ6fEosoVhAuEjThGKdkCKhE7Ljn8wihjfvArwYK qPAxZkiT29prXgACDXmOfmjxgVdvUIVyaWsbTzN/tYmEQ8cT3SC1YwpWmgmPTO/o9lKH 98BnvgRmokPmJv+lHTIrfo740uhToKLRdPNEpk+Av0Nndz0XSlMls7IFj3M9Ftep2BnT bJEIvyb96RjORbF4EO+NzIAH+ZGLAwy2ds2h2JKn03IBsk4v2xhJEHxFSZzHSOM3lxCp xwoA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b=WXPoiX00; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-57c60c5b41esi1671456a12.593.2024.06.08.16.10.58; Sat, 08 Jun 2024 16:10:58 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b=WXPoiX00; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D640468D709; Sun, 9 Jun 2024 02:10:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 71F5068D674 for ; Sun, 9 Jun 2024 02:10:48 +0300 (EEST) Received: by mail.gandi.net (Postfix) with ESMTPSA id 715C7C0002 for ; Sat, 8 Jun 2024 23:10:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc; s=gm1; t=1717888247; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=ezpw+KvqPW4Bmo4LuYDvCRbUsw8AlPB2hCqXKssqt8g=; b=WXPoiX00jmbznS7umV0OFjgcE6vO4ci5FL26bKSoLECnqVhz+/35/OIV4G0bVkFgcuPlHi 55PzlNSjc/8NwLd5amHFK0rzfyUZwFPKmyozQueXgp2eo93dkSN5tUmDV+RktTqgK32wmq uuDUgvhXKj30RLmXVkszruRivJ64mbtUSYjt9piiSTgyWmqjtY+ptscWyOw5RJsut6NHVN L4XYrLxY0d73J8zDC1ohiHY94gJC7Ww+o3iweQX3RQGOP5eHyb07vuTYvpT3yN4XQ+u1N3 GM0HFplpLUZxs7IK5FgXlz2NNFtW7G5JtIrz8yKFsw0S+Ltg74FJfCr6x01ZoA== From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sun, 9 Jun 2024 01:10:38 +0200 Message-ID: <20240608231046.3619551-1-michael@niedermayer.cc> X-Mailer: git-send-email 2.45.2 MIME-Version: 1.0 X-GND-Sasl: michael@niedermayer.cc Subject: [FFmpeg-devel] [PATCH 1/9] avformat/rtpenc_vc2hq: Check sizes X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: uLNM7JAR00qs Fixes: CID1452585 Untrusted loop bound Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer --- libavformat/rtpenc_vc2hq.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libavformat/rtpenc_vc2hq.c b/libavformat/rtpenc_vc2hq.c index 085204fa646..cf548191d2e 100644 --- a/libavformat/rtpenc_vc2hq.c +++ b/libavformat/rtpenc_vc2hq.c @@ -45,7 +45,7 @@ static void send_packet(AVFormatContext *ctx, uint8_t parse_code, int info_hdr_s ff_rtp_send_data(ctx, rtp_ctx->buf, RTP_VC2HQ_PL_HEADER_SIZE + info_hdr_size + size, rtp_m); } -static void send_picture(AVFormatContext *ctx, const uint8_t *buf, int size, int interlaced) +static int send_picture(AVFormatContext *ctx, const uint8_t *buf, int size, int interlaced) { RTPMuxContext *rtp_ctx = ctx->priv_data; GetBitContext gc; @@ -54,6 +54,9 @@ static void send_picture(AVFormatContext *ctx, const uint8_t *buf, int size, int uint16_t frag_len; char *info_hdr = &rtp_ctx->buf[4]; + if (size < DIRAC_PIC_NR_SIZE) + return AVERROR(EINVAL); + pic_nr = AV_RB32(&buf[0]); buf += DIRAC_PIC_NR_SIZE; size -= DIRAC_PIC_NR_SIZE; @@ -97,6 +100,7 @@ static void send_picture(AVFormatContext *ctx, const uint8_t *buf, int size, int send_packet(ctx, DIRAC_RTP_PCODE_HQ_PIC_FRAGMENT, 16, buf, frag_len, interlaced, second_field, size > 0 ? 0 : 1); buf += frag_len; } + return 0; } void ff_rtp_send_vc2hq(AVFormatContext *ctx, const uint8_t *frame_buf, int frame_size, int interlaced) @@ -110,16 +114,21 @@ void ff_rtp_send_vc2hq(AVFormatContext *ctx, const uint8_t *frame_buf, int frame parse_code = unit[4]; unit_size = AV_RB32(&unit[5]); + if (unit_size > end - unit) + break; + switch (parse_code) { /* sequence header */ /* end of sequence */ case DIRAC_PCODE_SEQ_HEADER: case DIRAC_PCODE_END_SEQ: - send_packet(ctx, parse_code, 0, unit + DIRAC_DATA_UNIT_HEADER_SIZE, unit_size - DIRAC_DATA_UNIT_HEADER_SIZE, 0, 0, 0); + if (unit_size >= DIRAC_DATA_UNIT_HEADER_SIZE) + send_packet(ctx, parse_code, 0, unit + DIRAC_DATA_UNIT_HEADER_SIZE, unit_size - DIRAC_DATA_UNIT_HEADER_SIZE, 0, 0, 0); break; /* HQ picture */ case DIRAC_PCODE_PICTURE_HQ: - send_picture(ctx, unit + DIRAC_DATA_UNIT_HEADER_SIZE, unit_size - DIRAC_DATA_UNIT_HEADER_SIZE, interlaced); + if (unit_size >= DIRAC_DATA_UNIT_HEADER_SIZE) + send_picture(ctx, unit + DIRAC_DATA_UNIT_HEADER_SIZE, unit_size - DIRAC_DATA_UNIT_HEADER_SIZE, interlaced); break; /* parse codes without specification */ case DIRAC_PCODE_AUX: