From: Johannes Schindelin Date: Thu, 15 May 2025 13:11:48 +0000 (+0000) Subject: bundle-uri: avoid using undefined output of `sscanf()` X-Git-Tag: v2.50.0-rc0~7^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d7cfbd4351bb304eefc09a8b1ba24fd40a9f36a0;p=thirdparty%2Fgit.git bundle-uri: avoid using undefined output of `sscanf()` In c429bed102 (bundle-uri: store fetch.bundleCreationToken, 2023-01-31) code was introduced that assumes that an `sscanf()` call leaves its output variables unchanged unless the return value indicates success. However, the POSIX documentation makes no such guarantee: https://pubs.opengroup.org/onlinepubs/9699919799/functions/sscanf.html So let's make sure that the output variable `maxCreationToken` is always well-defined. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- diff --git a/bundle-uri.c b/bundle-uri.c index 96d2ba726d..13a42f9238 100644 --- a/bundle-uri.c +++ b/bundle-uri.c @@ -532,11 +532,13 @@ static int fetch_bundles_by_token(struct repository *r, */ if (!repo_config_get_value(r, "fetch.bundlecreationtoken", - &creationTokenStr) && - sscanf(creationTokenStr, "%"PRIu64, &maxCreationToken) == 1 && - bundles.items[0]->creationToken <= maxCreationToken) { - free(bundles.items); - return 0; + &creationTokenStr)) { + if (sscanf(creationTokenStr, "%"PRIu64, &maxCreationToken) != 1) + maxCreationToken = 0; + if (bundles.items[0]->creationToken <= maxCreationToken) { + free(bundles.items); + return 0; + } } /*