From patchwork Sat Apr 11 22:44:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carl Eugen Hoyos X-Patchwork-Id: 18881 Delivered-To: andriy.gelman@gmail.com Received: by 2002:ad4:45d0:0:0:0:0:0 with SMTP id v16csp1192434qvt; Sat, 11 Apr 2020 15:44:44 -0700 (PDT) X-Google-Smtp-Source: APiQypKmRRtuqH5rBtcoVl0Svyyl4uMcu/gxpFKRkAc4/jCKOhbT9b7h6rFwcHFI43oFwPUMtihG X-Received: by 2002:a7b:c759:: with SMTP id w25mr374300wmk.68.1586645084295; Sat, 11 Apr 2020 15:44:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586645084; cv=none; d=google.com; s=arc-20160816; b=g2IHvdKViVpwiwTGxxCUbPzhZSRKW14HkFqb6M3vcvVX7h7tlW1tYeAYm/D6qDbO+t PrHDD9YOsHKKYGMV3qGViw/JZ1X7WKi2Wkhr2ocQL7KFupqQpGUMUYAYi0yOGmRwEfNw l+3LKze70Z8BCzyeDfZAa05WEEtCD+hkbNB7tKqcCXFNv3vNzNNQRey8SsLBcm25XH31 7O7oickqKEATBh1NR/VOm0v0y5gWeXPFU98/x+3DC0koDRBX79hhfmA+P18q8uKPTIIr 8GbaYMcVU9FfXaxY4vngcXpE6Eol8shoC9qKMjPkqDKqWOoFiLm1IOhcrg3ip2HZlHZG 7Yjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:in-reply-to:references:mime-version :dkim-signature:delivered-to; bh=n0cAQfx2omDBqTGkd+cV1op3U7YzgLNvGRJuUuMONNQ=; b=IpGUaA1wa/XWyfQBossmJ7SOAJzo/qzD9kDhZSDiyBaK5IUc5uB6jGxW2SPtz2wnYU 2r9SkhuYGFKRC6f7/HwNUa7bYzPiWQjDHAXzGFEmsnE/ZUZwEfVqxNnpRryaSf8CDvW/ OQjSgkcNVkoLv2yhkp+GDOG3WTkTc2Pmf8BuGu++5mMl9GjsuZ8yDPTuQbDVQwxVtWOz DClpJrbMMKIfNwYQDHW053OgFphLeO7juukA3mCShxfyZTB6wlUbgnyAXgXf4YWYCUT5 NS5sq+R+s79PM5LsEDW/N/Soma1uq4BVd4N4SXmFiaPS5Dyjw7TnkoAaXCtaiUu/8tXi 7lIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=C97x50fm; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f2si3908282wrs.441.2020.04.11.15.44.43; Sat, 11 Apr 2020 15:44:44 -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=@gmail.com header.s=20161025 header.b=C97x50fm; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E441568B865; Sun, 12 Apr 2020 01:44:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f65.google.com (mail-io1-f65.google.com [209.85.166.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 60FDF68B727 for ; Sun, 12 Apr 2020 01:44:36 +0300 (EEST) Received: by mail-io1-f65.google.com with SMTP id m4so5697809ioq.6 for ; Sat, 11 Apr 2020 15:44:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=bWxxtgKv1PQX99Nd71vRQFtleAqWOsG/0t3Tq4LNj74=; b=C97x50fm8Ldt4/tFdQPjgVtmbZjMb2M01KXg/onNuMD0E5lNmrW2cyu3frdyt5Dqel IkNcQAcHwa2MrzRKKuSsFnnPGZTuViT8wBxfNVObfw8AByiOEcahFwCUwvefv/KptTcN Khqd2snY7Sw6iHkdwXDGA+jV5gUxR+MCwmIBsE186DkwchZ/t9zM7FRfOCWScx/fVRCX pmesHPH9u9Jo3vlbR/M+bNdVu5vKtBjYqFvz8EptMp6AmSlG1jfj+GWPyn9ProeoiVzY arSmipeDon3IAQW7iV7QoOZbGL4OQ1UnXTyWkyiutL8BfgmmKc5LMP6XHbjggh87XEY1 ceyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=bWxxtgKv1PQX99Nd71vRQFtleAqWOsG/0t3Tq4LNj74=; b=jyISmlX+iSj9g6KzIQ0PlJIvYJPSkVuITrikEuhswJNLx8IQnRllakkpp3ZlVhZnz1 oLF2MGwNA8LRfTlW609f4rTDMDahX5RmIm/d8bLV3M5KneLTuktUECzol8CFB3G7xPYN JoC2aUgUGMk+c/pIKf+XNXNWVOJHCWABfsKKHCV5niYld2UYh4Ta51gI40GZbd8XV3MR QNJ3J4VyALRQg3vKriEOUbZu0K+v1Xr3Dd4O4+rvueIAaDBSJNbaRTy9/aDvPj3aOe63 UwMMNB3KkV4veFnjaslnDaVrGrn+Ljp57iehFh1eSFvQMikdhqajaXdNgCrKZgZHCngR v1+A== X-Gm-Message-State: AGi0PuafzyjXhbpBDZNKeC7WsYUEkwTUBNEmkc+eylLlCYlHO7P1mcSJ NsbYO4K/SFpHPiT6jLbSe1CKWD4e/ghacuOk7GkXcw== X-Received: by 2002:a05:6602:12:: with SMTP id b18mr9665578ioa.91.1586645074647; Sat, 11 Apr 2020 15:44:34 -0700 (PDT) MIME-Version: 1.0 References: <20200405120305.GQ10055@michaelspb> In-Reply-To: <20200405120305.GQ10055@michaelspb> From: Carl Eugen Hoyos Date: Sun, 12 Apr 2020 00:44:23 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH v2]lavu/mem: Make alloc array functions more similar to av_malloc X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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: EuaKPiB8SuTb Content-Length: 4978 Am So., 5. Apr. 2020 um 14:03 Uhr schrieb Michael Niedermayer : > > On Sat, Apr 04, 2020 at 12:46:36AM +0200, Carl Eugen Hoyos wrote: > > Hi! > > > > Attached patch makes the alloc array functions more similar to > > av_malloc, depending on max_alloc_size instead of INT_MAX. > > > > Allows a work-around for ticket #7140 > > > > Please comment, Carl Eugen > > > mem.c | 8 ++++---- > > 1 file changed, 4 insertions(+), 4 deletions(-) > > 507531ed6f0932834d005bc1dd7d18e762f158b2 0001-lavu-mem-Make-alloc-array-functions-more-similar-to-.patch > > From 7ae240a9f7885130251031aba5d0764b11947fec Mon Sep 17 00:00:00 2001 > > From: Carl Eugen Hoyos > > Date: Sat, 4 Apr 2020 00:37:03 +0200 > > Subject: [PATCH] lavu/mem: Make alloc array functions more similar to > > av_malloc(). > > > > Do not limit the array allocation functions to allocations of INT_MAX, > > instead depend on max_alloc_size like av_malloc(). > > > > Allows a workaround for ticket #7140. > > --- > > libavutil/mem.c | 8 ++++---- > > 1 file changed, 4 insertions(+), 4 deletions(-) > > av_size_mult() may be faster New patch attached. > also we possibly should check somewhere for SIZE_MAX < INT_MAX > for example in configure if we do not support such an oddity Will send a patch once this one is ok. Please comment, Carl Eugen From 643c501d6698d7d17e47a9f907165649f1446fa6 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Sun, 12 Apr 2020 00:36:30 +0200 Subject: [PATCH] lavu/mem: Make other alloc functions more similar to av_malloc(). Do not limit the array allocation functions and av_calloc() to allocations of INT_MAX, instead depend on max_alloc_size like av_malloc(). Allows a workaround for ticket #7140. --- libavutil/mem.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/libavutil/mem.c b/libavutil/mem.c index 88fe09b179..e044374c62 100644 --- a/libavutil/mem.c +++ b/libavutil/mem.c @@ -183,23 +183,26 @@ int av_reallocp(void *ptr, size_t size) void *av_malloc_array(size_t nmemb, size_t size) { - if (!size || nmemb >= INT_MAX / size) + size_t result; + if (av_size_mult(nmemb, size, &result) < 0 || !result) return NULL; - return av_malloc(nmemb * size); + return av_malloc(result); } void *av_mallocz_array(size_t nmemb, size_t size) { - if (!size || nmemb >= INT_MAX / size) + size_t result; + if (av_size_mult(nmemb, size, &result) < 0 || !result) return NULL; - return av_mallocz(nmemb * size); + return av_mallocz(result); } void *av_realloc_array(void *ptr, size_t nmemb, size_t size) { - if (!size || nmemb >= INT_MAX / size) + size_t result; + if (av_size_mult(nmemb, size, &result) < 0 || !result) return NULL; - return av_realloc(ptr, nmemb * size); + return av_realloc(ptr, result); } int av_reallocp_array(void *ptr, size_t nmemb, size_t size) @@ -243,9 +246,10 @@ void *av_mallocz(size_t size) void *av_calloc(size_t nmemb, size_t size) { - if (size <= 0 || nmemb >= INT_MAX / size) + size_t result; + if (av_size_mult(nmemb, size, &result) < 0 || !result) return NULL; - return av_mallocz(nmemb * size); + return av_mallocz(result); } char *av_strdup(const char *s) -- 2.24.1