diff options
author | Jeff King <peff@peff.net> | 2018-08-22 20:44:38 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-08-23 10:08:51 -0700 |
commit | 0d2db00e24ee2df4459151c5ba6de9306e30e727 (patch) | |
tree | 259ec0db3f8618b12743511fa26875b0dfa72c42 /t/check-non-portable-shell.pl | |
parent | Git 2.18 (diff) | |
download | tgif-0d2db00e24ee2df4459151c5ba6de9306e30e727.tar.xz |
trailer: use size_t for string offsets
Many of the string-parsing functions inside trailer.c return
integer offsets into the string (e.g., to point to the end
of the trailer block). Several of these use an "int" to
return or store the offsets. On a system where "size_t" is
much larger than "int" (e.g., most 64-bit ones), it's easy
to feed a gigantic commit message that results in a negative
offset. This can result in us reading memory before the
string (if the int is used as an index) or far after (if
it's implicitly cast to a size_t by passing to a strbuf
function).
Let's fix this by using size_t for all string offsets. Note
that several of the functions need ssize_t, since they use
"-1" as a sentinel value. The interactions here can be
pretty subtle. E.g., end_of_title in find_trailer_start()
does not itself need to be signed, but it is compared to the
result of last_line(), which is. That promotes the latter to
unsigned, and the ">=" does not behave as you might expect.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/check-non-portable-shell.pl')
0 files changed, 0 insertions, 0 deletions