From patchwork Sat Jun 22 10:03:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 11011255 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D187413AF for ; Sat, 22 Jun 2019 10:03:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C2FFA28BAF for ; Sat, 22 Jun 2019 10:03:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B77AB28BB3; Sat, 22 Jun 2019 10:03:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5884728BAF for ; Sat, 22 Jun 2019 10:03:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726287AbfFVKDj (ORCPT ); Sat, 22 Jun 2019 06:03:39 -0400 Received: from mout.web.de ([217.72.192.78]:53285 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726112AbfFVKDj (ORCPT ); Sat, 22 Jun 2019 06:03:39 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1561197811; bh=7X4HbrMkKGgcLrziqQKrS5CImUzlzOdTAfAcBIVgh80=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=UZbUuCTN0VO27YjEG2hzb++9TxUCNMm/oMQUjJGOaQ6sa313xq9a4wjovmYo2ybqL QA665C41p0VbYqMAhFrLfRavyFpKLFCtODhkf56Rcp3ngbu/DWHEeXwr1uXgo3MoGD wLPvf5LNMtfdgeWoDPrchwqClwaTJbnrAw9j6ANw= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from [192.168.178.23] ([79.203.26.169]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LtFYd-1ic3Am0wvr-012rfu; Sat, 22 Jun 2019 12:03:31 +0200 Subject: [PATCH v2 1/3] config: use unsigned_mult_overflows to check for overflows To: Junio C Hamano Cc: Johannes Schindelin via GitGitGadget , git@vger.kernel.org, Johannes Schindelin References: <9613c88849e53e00e1f7ade49c6c9056309ef0b9.1560426581.git.gitgitgadget@gmail.com> <03a68560-8058-7436-6edb-38e276a37190@web.de> <90ef3797-78a6-f6d9-443b-387c0ab7cbe7@web.de> From: =?utf-8?q?Ren=C3=A9_Scharfe?= Message-ID: <7a580777-2ccc-6097-477a-e66eb28d5f9b@web.de> Date: Sat, 22 Jun 2019 12:03:30 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Provags-ID: V03:K1:Yy174peznYIIttcQKbfAFSfCbbvkew/9StB2Iy2J+GjaxoVC5wW DQYGzcg7Qv2zbO98RxrbVhATU3M/dWVxYRVSszXTz5eGTfjYJyoPcy+Dpa/Ulofrs5RqiS4 wd0qxNkPkCu2ssfFga6TmEn0f+hUIuYxe+0/Vruzdihc/TK4T4oHtpelRY9nqriYwgsCHqC 7/CCCAarR+HrcqaE6E7cw== X-UI-Out-Filterresults: notjunk:1;V03:K0:7RgEzeDvZaQ=:BdxMRriDL8rcdvlUqJbHfX iGrr3THvoOmIv6Ls80agdP4IZPHwcyAcr7PyTpYFIYMbFAJvDffAxyDRh8lcLreFINHd4Nj9H smDQmEzZmcWjn+rsS7fpYmCjDzyRm/rBuBEctIxzv6gAAd/+Vi000J1izFBDrKwSf3/zrgMec 393uG7674ruoEKkHk3runoDHMP1RgerhSVPBtRgckBrRj9FzfmS6+E+jzsibtHuO/+3ZgVpep reFh0sr6Sc3Nh58kZ82rSfLt3Jip8+kUkHnNmO9KAvZ02kIDkw4vo7tt7XbyxUoyMGxrc9Kf7 HKxs+IY3Wn12gsmcRq1sAahTP+jsB0EmdqC9ER18+9pbYZJCrVRwgkU3kpAqbN4Ov9Hmy+3py xsd21Pr/D5HICKviKJteElXqeaIxq4SIfChKxua6g9Y/NO7yNoaRbdWDLyydkNAJcEmIGtYbL pMSvhSy6a0PTe3xA8/81ffr76EOnP4lHp3KgMb/pyFhnO4C50XHp61UOKbPo8cSgyrKfcVq7M YaQw6FVKHf4vhwouUO28IKH9kh0gwOWUgEFRYKyPnlzazF192/vxBQ9NfgZylm+RAS3d0cbCI Xc8CjpR0XiksCxfcMQdSFEzPsACj95vwWuZNg0eq9We3ZUTy69nLbUxTXyjZIYWBLtPObGRz4 4hUlXYM8PztnYcE3S3HYphrtD9uu10p3lDShft1Tk4qPX1b4OcY6OXAX5y5epM9aT5B5W3df6 FECUcR/kETMQl6T4KPllWJd9paGzqTWv+GmnuVCNHDz7xOBZtuqPD6cIyY9p51AdLHcafamOg qGM1YQxTMbIRJBn0vWbAE9konOk32xX4GB8MIzETNMnRY9MOarHgv1vqU4w6Jp6UQciWstCL2 FPl+E210jhtV6RNef7GJGiF+oBxjTPvXXC9MoTnn1F+JLQIfeu2Jd6LAkVqzqHYwDJQoiaNLk InWckgYsQfvKMIIA+HfxRXcHMAu9b4rA= Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP parse_unit_factor() checks if a K, M or G is present after a number and multiplies it by 2^10, 2^20 or 2^30, respectively. One of its callers checks if the result is smaller than the number alone to detect overflows. The other one passes 1 as the number and does multiplication and overflow check itself in a similar manner. This works, but is inconsistent, and it would break if we added support for a bigger unit factor. E.g. 16777217T is 2^64 + 2^40, i.e. too big for a 64-bit number. Modulo 2^64 we get 2^40 == 1TB, which is bigger than the raw number 16777217 == 2^24 + 1, so the overflow would go undetected by that method. Let both callers pass 1 and handle overflow check and multiplication themselves. Do the check before the multiplication, using unsigned_mult_overflows, which is simpler and can deal with larger unit factors. Signed-off-by: Rene Scharfe --- Patch generated with --function-context for easier review (e.g. to see why we can stop updating uval in place). config.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) -- 2.22.0 diff --git a/config.c b/config.c index 01c6e9df23..3c00369ba8 100644 --- a/config.c +++ b/config.c @@ -856,29 +856,29 @@ static int parse_unit_factor(const char *end, uintmax_t *val) static int git_parse_signed(const char *value, intmax_t *ret, intmax_t max) { if (value && *value) { char *end; intmax_t val; uintmax_t uval; uintmax_t factor = 1; errno = 0; val = strtoimax(value, &end, 0); if (errno == ERANGE) return 0; if (!parse_unit_factor(end, &factor)) { errno = EINVAL; return 0; } uval = val < 0 ? -val : val; - uval *= factor; - if (uval > max || (val < 0 ? -val : val) > uval) { + if (unsigned_mult_overflows(factor, uval) || + factor * uval > max) { errno = ERANGE; return 0; } val *= factor; *ret = val; return 1; } errno = EINVAL; return 0; } @@ -886,26 +886,27 @@ static int git_parse_signed(const char *value, intmax_t *ret, intmax_t max) static int git_parse_unsigned(const char *value, uintmax_t *ret, uintmax_t max) { if (value && *value) { char *end; uintmax_t val; - uintmax_t oldval; + uintmax_t factor = 1; errno = 0; val = strtoumax(value, &end, 0); if (errno == ERANGE) return 0; - oldval = val; - if (!parse_unit_factor(end, &val)) { + if (!parse_unit_factor(end, &factor)) { errno = EINVAL; return 0; } - if (val > max || oldval > val) { + if (unsigned_mult_overflows(factor, val) || + factor * val > max) { errno = ERANGE; return 0; } + val *= factor; *ret = val; return 1; } errno = EINVAL; return 0; } From patchwork Sat Jun 22 10:03:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 11011257 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EEFEA13AF for ; Sat, 22 Jun 2019 10:03:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E097B28BAF for ; Sat, 22 Jun 2019 10:03:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D4B7828BB3; Sat, 22 Jun 2019 10:03:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 66C4728BAF for ; Sat, 22 Jun 2019 10:03:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726293AbfFVKDl (ORCPT ); Sat, 22 Jun 2019 06:03:41 -0400 Received: from mout.web.de ([212.227.17.11]:43003 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726112AbfFVKDk (ORCPT ); Sat, 22 Jun 2019 06:03:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1561197817; bh=G69plghB/lRsTRVOca7w69WcB+FnzDSEVJ5IwQuYXk0=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=mSqY9DsRjiVl+g1maSlor8ZqLgsOqePDDiuWuBRd9PyVs1PlsVtucoeSx8mNxvLtb b3iuma1apk4Zarti8/CWGbH4QAikWsmkZg98JgwwCoNia5vL841N310SI5pBOhTsX3 wQfSEtF172djrwIg9wxQHa03tAj3K1fzPCZ1/ZrM= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from [192.168.178.23] ([79.203.26.169]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MWRzK-1i7eAF1BxC-00XfbE; Sat, 22 Jun 2019 12:03:37 +0200 Subject: [PATCH v2 2/3] config: don't multiply in parse_unit_factor() To: Junio C Hamano Cc: Johannes Schindelin via GitGitGadget , git@vger.kernel.org, Johannes Schindelin References: <9613c88849e53e00e1f7ade49c6c9056309ef0b9.1560426581.git.gitgitgadget@gmail.com> <03a68560-8058-7436-6edb-38e276a37190@web.de> <90ef3797-78a6-f6d9-443b-387c0ab7cbe7@web.de> From: =?utf-8?q?Ren=C3=A9_Scharfe?= Message-ID: <20bc9ec5-6e69-57aa-7347-4b7eaa8c8c1f@web.de> Date: Sat, 22 Jun 2019 12:03:36 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Provags-ID: V03:K1:pFMxU9s/60p/P12g3vRf414CPTUtWcqfpFNnHW5TN2ocJC/sK6b 0xnRNMDGeiIAlAleEudMojzQHo982IKudWemieJfEMhZKyB/nhmJq/DDj0WlHhkguTjj+vK bl1PyLzVY5k/w1sNrnx18itIY2rGlfHjoHDTzRA0hilBcDCwa73sWJkX627ARjYKZ9V8UCx a7qU8ekB/cm8wce40Amsw== X-UI-Out-Filterresults: notjunk:1;V03:K0:xy/twpCJokY=:QTYFjjyc9nZnZl0HwdMdAD PLOESo19tEbbs5NIEmpXmatrfbJw+D/GnIjadUru2/MMW/AT5dDR8QOAdgXSJQB10Y5KYJKj0 t5fDxpZt01+IKC1gf650NaJ/hkLcZOxlGrAAzuGy5k0IG5qgPyxizb68T4ZsGdb2wlW7jjxsE flV3+kLfNXVhi9feBGr80gKknhYPMz8+zKJ8uOlygU+0n6qa2UYKHJTXhwdiIN63jQtgvuX3I VBKbyJJxayTLDKTR4/hbkARcjpq3WYJ4kU1dKGlw7Y3IeDWsm6dXzFEWYu69b+6M/3wuILfJc aEjai6Evl4Tpaji7LP5GzX7Yw7TtbGj/D2XMH4xj4tX90IppJzLgr/cnth84Oo6raqKROP/cU ec9S4ZDxw4cn1Hkzqj24x78/xMBF6L7bEH2uw9zaHcVEVfTjMZvwTBLr72xbpUFKBSgm/EQ1f mJH1TL8oktOHMRS4JFexzd82xPW48tpiz88VJJyZz0N/zQcxhtYyWtHZNiT/nLvB578aCLXZq YobkWwescEtHY/AP9ViFJXLYv3npICVaqhDifegAvovNK1C9nVSusQil2vwjehnPSyaU0BNG7 q2zZsBcIZdVwttBb2gxikEeyqsTrIJyhKrRgkrT+3NMIcJrmXOW3friwZRuk2A+5DaCyHlS7H cgADjpFnm9JfMW8iZLYACJ5jAlY74X81MJOxEJ2dGR4s8n0SI1tHXf2dfWgiXM6q0U2A1fNrA oYh05AcDBYhgRLiipR3y1PYQy5xeDt4GSqtii6845nQ20evZ06J9MI6KkpjPN5Y4wXGza1qr+ 2G80UI8CSo3ub/MiR/Zv+koA36Ggi93sb6u+BQQZiQMo/7KURWx0ifDnJq4NgxuzWKhDlNzWX tgR3rd8QJyWV0zI8Xl/h8RKbm6E3ScD03zdfEEotsXR/xMYc//pSCLhtuz8egNCxQ68FUZE55 Lm0lLNz805ht89JQUA8MOOJI08pxe/SQ= Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP parse_unit_factor() multiplies the number that is passed to it with the value of a recognized unit factor (K, M or G for 2^10, 2^20 and 2^30, respectively). All callers pass in 1 as a number, though, which allows them to check the actual multiplication for overflow before they are doing it themselves. Ignore the passed in number and don't multiply, as this feature of parse_unit_factor() is not used anymore. Rename the output parameter to reflect that it's not about the end result anymore, but just about the unit factor. Suggested-by: Johannes Schindelin Signed-off-by: Rene Scharfe --- config.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) -- 2.22.0 diff --git a/config.c b/config.c index 3c00369ba8..a8bd1d821e 100644 --- a/config.c +++ b/config.c @@ -834,20 +834,22 @@ static int git_parse_source(config_fn_t fn, void *data, return error_return; } -static int parse_unit_factor(const char *end, uintmax_t *val) +static int parse_unit_factor(const char *end, uintmax_t *factor) { - if (!*end) + if (!*end) { + *factor = 1; return 1; + } else if (!strcasecmp(end, "k")) { - *val *= 1024; + *factor = 1024; return 1; } else if (!strcasecmp(end, "m")) { - *val *= 1024 * 1024; + *factor = 1024 * 1024; return 1; } else if (!strcasecmp(end, "g")) { - *val *= 1024 * 1024 * 1024; + *factor = 1024 * 1024 * 1024; return 1; } return 0; @@ -859,7 +861,7 @@ static int git_parse_signed(const char *value, intmax_t *ret, intmax_t max) char *end; intmax_t val; uintmax_t uval; - uintmax_t factor = 1; + uintmax_t factor; errno = 0; val = strtoimax(value, &end, 0); @@ -888,7 +890,7 @@ static int git_parse_unsigned(const char *value, uintmax_t *ret, uintmax_t max) if (value && *value) { char *end; uintmax_t val; - uintmax_t factor = 1; + uintmax_t factor; errno = 0; val = strtoumax(value, &end, 0); From patchwork Sat Jun 22 10:03:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 11011259 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D9538112C for ; Sat, 22 Jun 2019 10:03:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CAAF128BB1 for ; Sat, 22 Jun 2019 10:03:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BEC7D28BAF; Sat, 22 Jun 2019 10:03:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5EBE028BAF for ; Sat, 22 Jun 2019 10:03:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726307AbfFVKDq (ORCPT ); Sat, 22 Jun 2019 06:03:46 -0400 Received: from mout.web.de ([212.227.17.11]:56617 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726112AbfFVKDq (ORCPT ); Sat, 22 Jun 2019 06:03:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1561197821; bh=+Yu8FSqRF/lMv39rDznxXiDo0anhBi4oQmj0LV4sHng=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=JxaNyB6cGcGjZecBlCeZTgzH+R1Cd874+nw3T9nXr3PgfKWnFEWLa0OMzUR8QjMfW qXz8wqaOp6dPhI4wv/1pSpA4DcL9t3oNOBaa+co+CRFlcKOhC+3uBh3p5j/Yj06ZA2 cJVtwoxYRysoXo5dCpQiJGcFEEmf48ixTif8KFro= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from [192.168.178.23] ([79.203.26.169]) by smtp.web.de (mrweb103 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LbJ4A-1iKnIt1a4g-00kvls; Sat, 22 Jun 2019 12:03:41 +0200 Subject: [PATCH v2 3/3] config: simplify parsing of unit factors To: Junio C Hamano Cc: Johannes Schindelin via GitGitGadget , git@vger.kernel.org, Johannes Schindelin References: <9613c88849e53e00e1f7ade49c6c9056309ef0b9.1560426581.git.gitgitgadget@gmail.com> <03a68560-8058-7436-6edb-38e276a37190@web.de> <90ef3797-78a6-f6d9-443b-387c0ab7cbe7@web.de> From: =?utf-8?q?Ren=C3=A9_Scharfe?= Message-ID: <7a0ea32c-f480-4aa9-d258-68a62373d916@web.de> Date: Sat, 22 Jun 2019 12:03:40 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Provags-ID: V03:K1:CNFzCk/T5MRogAF+Ugq+Y3M/lZvVVqbTGDeE+mZKFucOiCNGVPl weFeNEqstqdoObbDc0Rh0Gv/BHriT/jtCAPH5wlFlsArWrjag7Y5N0ezm4dBzGnWCzsvFcj dEbblJVOwfA1tVEnGyEA8B1MGaw85+9gHFGRND2f9XDort/Nj7EQg0upXSdQ9ZsZPcV1v2r dpLddXsVK0FJShhyysBzQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:58BoxgAQ314=:ERO99LQ0P9VZV98rO871Vz IlE8zY1sC0Vx6hy3kzDcveg4Lx7bpqk/zEeWLW+n4HeMIMaiCY8Cjuteea0MQUqavJgHL3zSI is6A7f9y+i6m/1kTkT55sBOnFfaZjhqKbx17fn4VBVnIr2ZuiKc1AOIRFtpq9bD/ge+MQNw00 bXhCc0J0aC7HO5v6CWB45ZGKaRm7nVAOQhQWgq1/toZovaNJOa5ArPaz6bhPhVAxYybg5LArz 6GqABztKCtHJCV+ecnOLfGxl1Evii0Jut/v5F+vWFTjLvNySibhaumACutXA4yBedZxpj2/wq ErEa/aNcFZa+Wj2ERB39rwkTwAnibvmfB4ufF0DSlzKULnslNhODJXJRwz+U99zt1bKExY/BT MNK2owBu12cewV872y6UfCw+lDkKPd4RFa1BO3gfPTFhltdWbYsBC8HFs/+RANlJYS0HP7ccO 8n3D8pGhHJXdBQT2XAZ8oP3qW/gkL0fsY+eeYCSKczaKFXZAn3i7tU+pH0x8ao204OiJq2ul0 zibManlpj55K/ah2ecLWmtiGYQsG2Dtqt/9RMaSyK7sZ7rOB3zL0NbZoXXEaHRHQSQbwFlRUB FPsAy/dHWBQl8bchwJvl55NiCfoDZ+1S7fT+yJkIwoiflWPgS2DKUI7yHy2sWwvQOzI7EFNA9 3nawuNskPBrXS9/HgLsfMVAX2rpqFqyXMa4yzPQD5CiUIo6I87r1mHXrVovdYJ7YhBxtfwEJS 5ZyBKg33XGvL5pPznTMX9KEcXUG+k4LFtIvAkfK9TlAKY/VW90oXSTG+ttbzBnR6PL/gHm4GZ 5YThL19p4xaMEM3pOYKsIEfkZymMLbUplL8xtzoQo/6CFs4/202m4iFrekn1Nm3FKttX/Ti1n t5OIpy/JbKto82sAbDs/nVGyjGJfJ3VxM3pOICF21JVEbk7Y7QSvSR+Pi4em84yw0E1GNa+bk TNFNHYDlmQ7PtPVL+Q/uRLDQLAv9ynFs= Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Just return the value of the factor or zero for unrecognized strings instead of using an output reference and a separate return value to indicate success. This is shorter and simpler. It basically reverts that function to before c8deb5a146 ("Improve error messages when int/long cannot be parsed from config", 2007-12-25), while keeping the better messages, so restore its old name, get_unit_factor(), as well. Signed-off-by: Rene Scharfe --- Change from v1: The "else" is kept in each branch, even though it's not needed, to match the original code from before c8deb5a146. Other than that this series arrives at the same end result. Patch 3 can be dropped easily if it's not convincing. config.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) -- 2.22.0 diff --git a/config.c b/config.c index a8bd1d821e..26196bdccf 100644 --- a/config.c +++ b/config.c @@ -834,24 +834,16 @@ static int git_parse_source(config_fn_t fn, void *data, return error_return; } -static int parse_unit_factor(const char *end, uintmax_t *factor) +static uintmax_t get_unit_factor(const char *end) { - if (!*end) { - *factor = 1; + if (!*end) return 1; - } - else if (!strcasecmp(end, "k")) { - *factor = 1024; - return 1; - } - else if (!strcasecmp(end, "m")) { - *factor = 1024 * 1024; - return 1; - } - else if (!strcasecmp(end, "g")) { - *factor = 1024 * 1024 * 1024; - return 1; - } + else if (!strcasecmp(end, "k")) + return 1024; + else if (!strcasecmp(end, "m")) + return 1024 * 1024; + else if (!strcasecmp(end, "g")) + return 1024 * 1024 * 1024; return 0; } @@ -867,7 +859,8 @@ static int git_parse_signed(const char *value, intmax_t *ret, intmax_t max) val = strtoimax(value, &end, 0); if (errno == ERANGE) return 0; - if (!parse_unit_factor(end, &factor)) { + factor = get_unit_factor(end); + if (!factor) { errno = EINVAL; return 0; } @@ -896,7 +889,8 @@ static int git_parse_unsigned(const char *value, uintmax_t *ret, uintmax_t max) val = strtoumax(value, &end, 0); if (errno == ERANGE) return 0; - if (!parse_unit_factor(end, &factor)) { + factor = get_unit_factor(end); + if (!factor) { errno = EINVAL; return 0; }