From patchwork Sat May 15 16:38:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vedaa X-Patchwork-Id: 27788 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp1425261iof; Sat, 15 May 2021 09:38:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxfw2a3G2sp/IM7HHzUdYZX0vuaGTjh4Zgnp7X8fbHN95DH+nqm6Qw7z4qQG3+TD3ZjvVig X-Received: by 2002:a17:906:d7a2:: with SMTP id pk2mr53955300ejb.551.1621096722268; Sat, 15 May 2021 09:38:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621096722; cv=none; d=google.com; s=arc-20160816; b=o//s31Z1bjwQt4kiSjUwSVCA3iOA36ZJ8xow1KnFdF0ApsGP018qPm55JLOT69s1J8 vM5GQew+4UpdrN6ZyWmifzOJd4ZrFhK0sxcYxTiLEUGK+4shhEAKuLMTUfzAfs6WDIrC 1NgJOr3dHYR1LlpT02oNfv+Tw3FmT0Tx2HgZ4rtDFB+8RZ3vdRwkWnJHTVtZK58fGbg4 EvAcEIv8HKykOVkuMF19gKllbTuZC4e1E8SS24zCK4KKaJ6AG7+IYl1/nnrwjQXWx4u9 QkyWYySJOK0JEDgjyxmomBw/ncZXX8mN0RCy+wmhX6o5ARZJ+amzKu2/pLrSmKRz1uNz WpUw== 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:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=4TAgt+F71McdJUgrY+9h/37DY90rUsXJrAjlA4y20T0=; b=TsOrvRha1lfbgS71q5Fs+oshSi6/L2XIEjGh3jwZ0hJNR7YOKjBi1s3qijbwsqEJK9 skjsxF4R4BRD6wRHbD27tk1EU13E+4jsT75volR0J8Sb3vAHpmxlucgnE50jhoAHw+MT q7fjYf2dtyaxyt2Eu64+qJKV4o8xDYGqGVZqSsoRqwnJvbPoJyThaisAZyOufv4W1D6D PPGXEAPByfBEzXfNQy2apOG/F3KKKJ8VPQR45Gswtub633kKdWjnIGNQYecFa/Wxj/EC uASGrppBLX8xuikQKFzfClU8ofQlagkHa6tvJclCxh4LfrGGljYo6HPXoNgP3kowZ97p dlqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@riseup.net header.s=squak header.b=INBYw2vQ; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=riseup.net Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a90si9125304edf.408.2021.05.15.09.38.41; Sat, 15 May 2021 09:38:42 -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=@riseup.net header.s=squak header.b=INBYw2vQ; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=riseup.net Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C6D196882D8; Sat, 15 May 2021 19:38:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mx1.riseup.net (mx1.riseup.net [198.252.153.129]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 47A71680586 for ; Sat, 15 May 2021 19:38:31 +0300 (EEST) Received: from fews1.riseup.net (fews1-pn.riseup.net [10.0.1.83]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client CN "*.riseup.net", Issuer "Sectigo RSA Domain Validation Secure Server CA" (not verified)) by mx1.riseup.net (Postfix) with ESMTPS id 4FjB0j12HBzDqBj for ; Sat, 15 May 2021 09:38:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=riseup.net; s=squak; t=1621096709; bh=OeDCkJi85xSMdidyU9wjvkN3JrV/05NguAkWPNnfQVI=; h=From:To:Subject:Date:In-Reply-To:References:From; b=INBYw2vQdbAx6/lj9nlxJanjQLvLVZpavREDt+CKn0Zab4y+f7DLy2lhYf4J4438h +mRtz5WQ+pxjfgcRnZNbmqO39UAX8xu4g4ZFg4hbQfkze+15pvPybTk65IkCT5R4Ek A1awk/QhJCgCqvb77lUb1SIQpLUO+qAd6631ZAZM= X-Riseup-User-ID: 04CF0A6E870CF09E3558F2938E29588F2ADCF7B4BFB20CF2F9931A8A802A6FC4 Received: from [127.0.0.1] (localhost [127.0.0.1]) by fews1.riseup.net (Postfix) with ESMTPSA id 4FjB0g6KCJz5vnv for ; Sat, 15 May 2021 09:38:27 -0700 (PDT) From: Vedaa To: ffmpeg-devel@ffmpeg.org Date: Sat, 15 May 2021 22:08:17 +0530 Message-Id: <20210515163817.112623-1-vedaa@riseup.net> In-Reply-To: <20210510153647.GE4777@pb2> References: <20210510153647.GE4777@pb2> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] fate/integer.c: Connect test to fuzzer 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: z+nRICP72STP Hi, Apologies for the trivial mistakes. I have fixed them in this patch. I have also added simple checks for overflow and underflow. Would this be sufficient or should I reduce the bits I read from the fuzzer? I will also submit a pull request to oss-fuzz as soon as this patch is applied. :) --- Makefile | 2 ++ libavutil/tests/integer.c | 21 ++---------------- libavutil/tests/integer.h | 45 +++++++++++++++++++++++++++++++++++++++ tools/Makefile | 3 +++ tools/target_int_fuzzer.c | 39 +++++++++++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 19 deletions(-) create mode 100644 libavutil/tests/integer.h create mode 100644 tools/target_int_fuzzer.c diff --git a/Makefile b/Makefile index 7e9d8b08c3..92fe8cac65 100644 --- a/Makefile +++ b/Makefile @@ -62,6 +62,8 @@ tools/target_dem_fuzzer$(EXESUF): tools/target_dem_fuzzer.o $(FF_DEP_LIBS) tools/target_io_dem_fuzzer$(EXESUF): tools/target_io_dem_fuzzer.o $(FF_DEP_LIBS) $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH) +tools/target_int_fuzzer$(EXESUF): tools/target_int_fuzzer.o $(FF_DEP_LIBS) + $(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH) tools/enum_options$(EXESUF): ELIBS = $(FF_EXTRALIBS) tools/enum_options$(EXESUF): $(FF_DEP_LIBS) diff --git a/libavutil/tests/integer.c b/libavutil/tests/integer.c index d2c8f2a903..02e1d9219c 100644 --- a/libavutil/tests/integer.c +++ b/libavutil/tests/integer.c @@ -18,31 +18,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include - -#include "libavutil/avassert.h" -#include "libavutil/integer.h" -#include "libavutil/intmath.h" +#include "libavutil/tests/integer.h" int main(void){ int64_t a,b; for(a=7; a<256*256*256; a+=13215){ for(b=3; b<256*256*256; b+=27118){ - AVInteger ai= av_int2i(a); - AVInteger bi= av_int2i(b); - - av_assert0(av_i2int(ai) == a); - av_assert0(av_i2int(bi) == b); - av_assert0(av_i2int(av_add_i(ai,bi)) == a+b); - av_assert0(av_i2int(av_sub_i(ai,bi)) == a-b); - av_assert0(av_i2int(av_mul_i(ai,bi)) == a*b); - av_assert0(av_i2int(av_shr_i(ai, 9)) == a>>9); - av_assert0(av_i2int(av_shr_i(ai,-9)) == a<<9); - av_assert0(av_i2int(av_shr_i(ai, 17)) == a>>17); - av_assert0(av_i2int(av_shr_i(ai,-17)) == a<<17); - av_assert0(av_log2_i(ai) == av_log2(a)); - av_assert0(av_i2int(av_div_i(ai,bi)) == a/b); + TestInteger(a,b); } } return 0; diff --git a/libavutil/tests/integer.h b/libavutil/tests/integer.h new file mode 100644 index 0000000000..1e28c29787 --- /dev/null +++ b/libavutil/tests/integer.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2004 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef AVUTIL_TESTS_INTEGER_H +#define AVUTIL_TESTS_INTEGER_H + +#include +#include "libavutil/avassert.h" +#include "libavutil/integer.h" +#include "libavutil/intmath.h" + +static inline void TestInteger(int64_t a, int64_t b) +{ + AVInteger ai= av_int2i(a); + AVInteger bi= av_int2i(b); + + av_assert0(av_i2int(ai) == a); + av_assert0(av_i2int(bi) == b); + av_assert0(av_i2int(av_add_i(ai,bi)) == a+b); + av_assert0(av_i2int(av_sub_i(ai,bi)) == a-b); + av_assert0(av_i2int(av_mul_i(ai,bi)) == a*b); + av_assert0(av_i2int(av_shr_i(ai, 9)) == a>>9); + av_assert0(av_i2int(av_shr_i(ai,-9)) == a<<9); + av_assert0(av_i2int(av_shr_i(ai, 17)) == a>>17); + av_assert0(av_i2int(av_shr_i(ai,-17)) == a<<17); + av_assert0(av_log2_i(ai) == av_log2(a)); + av_assert0(av_i2int(av_div_i(ai,bi)) == a/b); +} +#endif /* AVUTIL_TESTS_INTEGER_H */ diff --git a/tools/Makefile b/tools/Makefile index 82baa8eadb..fde7f08984 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -17,6 +17,9 @@ tools/target_dem_fuzzer.o: tools/target_dem_fuzzer.c tools/target_io_dem_fuzzer.o: tools/target_dem_fuzzer.c $(COMPILE_C) -DIO_FLAT=0 +tools/target_int_fuzzer.o: tools/target_int_fuzzer.c + $(COMPILE_C) + OUTDIRS += tools clean:: diff --git a/tools/target_int_fuzzer.c b/tools/target_int_fuzzer.c new file mode 100644 index 0000000000..e3f72d3356 --- /dev/null +++ b/tools/target_int_fuzzer.c @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Vedaa + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/tests/integer.h" +#include "libavutil/intreadwrite.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (size < 2 * sizeof(int64_t)) + return 1; + + int64_t a,b,pdt; + a = AV_RB64(data); + b = AV_RB64(data + sizeof(int64_t)); + pdt = a * b; + if ((b > 0 && a < INT64_MAX - b && a > INT64_MIN + b ) || + (b < 0 && a > INT64_MIN - b && a < INT64_MAX + b) && + pdt/b == a) + TestInteger(a,b); + return 0; +}