From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 64FD141145 for ; Wed, 14 Sep 2022 12:32:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 92DE468BAF9; Wed, 14 Sep 2022 15:32:44 +0300 (EEST) Received: from mail-yw1-f170.google.com (mail-yw1-f170.google.com [209.85.128.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 05EB468B97D for ; Wed, 14 Sep 2022 15:32:38 +0300 (EEST) Received: by mail-yw1-f170.google.com with SMTP id 00721157ae682-3454b0b1b6dso177910977b3.4 for ; Wed, 14 Sep 2022 05:32:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:from:to:cc:subject:date; bh=PKr3Z348Ww1LYO8FiWTSBAtpzlwQb88d1dHb2e2TWxQ=; b=jnPk3UUxes/853im3pKbqK9lAHDF3vRktcyihkuErqoP2cEBk+uHbAHx8YdMkk7iWc jt8nqx9WiXAm2rOvl0btCSLFJNDlcBc8YJfJRQ4kT6bmJQeQAWtbkLu2iFKuFxV71Zdh EFYzV6RB7Yjt6QXU3C9VHO82+qUAxhH9m5kIIEgygr+K0JDXONRluFbVKOfAriAoLb9Q KpzTXFUKo5U9+aG2m9G+M2sLzp7W9c21jehSo3FJUGb84Jgg7mqJBBGLZKsg3QtwH+CR VW+9NcZHmkI/RP4owJbntwBdx6i0rVDEYeR/oT6VckepAuIYSc6mk2zh/Sd1b5OyXQYX TeWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=PKr3Z348Ww1LYO8FiWTSBAtpzlwQb88d1dHb2e2TWxQ=; b=N9pIrJfRjRN5fgwjteMVB8LdI6AEg94AyYDeIwj2od1Jqc6BzNzAAVJvFZZQ13kBBa cbgEcf8LduLHjw58zTEZ5i5RH2u2qisBzPC/TOoRm7TSkXc8fTx97pZrVu33cdnDcBwx 7XFHVTsMWyNtsPOlr5U7MnSzEBDGa17SwmiEave2Sz6svUEPZuDgQDmVgJ05GFWeqk2Q to1oR/KgTj2rZa+JAWhHphBqoiquYjePnR8iZ5vPyE21/H0B0OM4be+sU8dNVurnnUVt iqJgBpGYXgEAE93bRxEff/EJey5Z5rc9Qz2s4brYFAQgWOJIy7n2Dp3l3NT/+enzBhED K81A== X-Gm-Message-State: ACgBeo0tXGpthWNnmPhqDszcxiadMyCzk7JYCabC2vNwBhOA/D486Bz8 RBD/1fmHSMCWXwnTMnQgsj3ybhPwF91CO6+CiKa2gJqt X-Google-Smtp-Source: AA6agR5rT89nXQ7xkVaujZYqeT01avbu4Le2L+W6udoN3Oo7EevV/gBY8BJe1JI4kKlJU8O3ISBbD5FmHqVY2pdfrBc= X-Received: by 2002:a0d:f082:0:b0:31f:1d1d:118d with SMTP id z124-20020a0df082000000b0031f1d1d118dmr30172681ywe.124.1663158756739; Wed, 14 Sep 2022 05:32:36 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a81:7402:0:0:0:0:0 with HTTP; Wed, 14 Sep 2022 05:32:36 -0700 (PDT) In-Reply-To: References: From: Paul B Mahol Date: Wed, 14 Sep 2022 14:32:36 +0200 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH 2/3] avutil/dict: Improve appending values 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 Cc: Andreas Rheinhardt Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 9/13/22, Andreas Rheinhardt wrote: > When appending two values (due to AV_DICT_APPEND), the earlier code > would first zero-allocate a buffer of the required size and then > copy both parts into it via av_strlcat(). This is problematic, > as it leads to quadratic performance in case of frequent enlargements. > Fix this by using av_realloc() (which is hopefully designed to handle > such cases in a better way than simply throwing the buffer we already > have away) and by copying the string via memcpy() (after all, we already > calculated the strlen of both strings). > > Signed-off-by: Andreas Rheinhardt > --- > libavutil/dict.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/libavutil/dict.c b/libavutil/dict.c > index c01165634e..1968063b0b 100644 > --- a/libavutil/dict.c > +++ b/libavutil/dict.c > @@ -98,16 +98,17 @@ int av_dict_set(AVDictionary **pm, const char *key, > const char *value, > return 0; > } > if (copy_value && flags & AV_DICT_APPEND) { > - size_t len = strlen(tag->value) + strlen(copy_value) + 1; > - char *newval = av_mallocz(len); > + size_t oldlen = strlen(tag->value); > + size_t new_part_len = strlen(copy_value); > + size_t len = oldlen + new_part_len + 1; > + char *newval = av_realloc(tag->value, len); > if (!newval) > goto err_out; > - av_strlcat(newval, tag->value, len); > - av_strlcat(newval, copy_value, len); > + memcpy(newval + oldlen, copy_value, new_part_len + 1); > av_freep(©_value); > copy_value = newval; > - } > - av_free(tag->value); > + } else > + av_free(tag->value); > av_free(tag->key); > *tag = m->elems[--m->count]; > } else if (copy_value) { > -- > 2.34.1 > LGTM > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".