]> git.ipfire.org Git - thirdparty/git.git/commit - utf8.h
utf8: fix truncated string lengths in `utf8_strnwidth()`
authorPatrick Steinhardt <ps@pks.im>
Thu, 1 Dec 2022 14:46:53 +0000 (15:46 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 9 Dec 2022 05:26:21 +0000 (14:26 +0900)
commit522cc87fdc25449222a5894a428eebf4b8d5eaa9
tree05b0e6b3fc523e14d7eb612abe30520681313a26
parent48050c42c73c28b0c001d63d11dffac7e116847b
utf8: fix truncated string lengths in `utf8_strnwidth()`

The `utf8_strnwidth()` function accepts an optional string length as
input parameter. This parameter can either be set to `-1`, in which case
we call `strlen()` on the input. Or it can be set to a positive integer
that indicates a precomputed length, which callers typically compute by
calling `strlen()` at some point themselves.

The input parameter is an `int` though, whereas `strlen()` returns a
`size_t`. This can lead to implementation-defined behaviour though when
the `size_t` cannot be represented by the `int`. In the general case
though this leads to wrap-around and thus to negative string sizes,
which is sure enough to not lead to well-defined behaviour.

Fix this by accepting a `size_t` instead of an `int` as string length.
While this takes away the ability of callers to simply pass in `-1` as
string length, it really is trivial enough to convert them to instead
pass in `strlen()` instead.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
column.c
pretty.c
utf8.c
utf8.h