]> git.proxmox.com Git - libgit2.git/commit
transports: smart: fix potential invalid memory dereferences
authorPatrick Steinhardt <ps@pks.im>
Mon, 6 Jun 2016 10:59:17 +0000 (12:59 +0200)
committerCarlos Martín Nieto <cmn@dwim.me>
Sat, 1 Oct 2016 15:40:37 +0000 (17:40 +0200)
commit1a7096043645da9f44dad15a51a8034f3e716b5b
tree7073afd90d670e9a7c2d69817b9feca9a86f8673
parent11408f0e43ba38829863a992fc73a77c6c18e035
transports: smart: fix potential invalid memory dereferences

When we receive a packet of exactly four bytes encoding its
length as those four bytes it can be treated as an empty line.
While it is not really specified how those empty lines should be
treated, we currently ignore them and do not return an error when
trying to parse it but simply advance the data pointer.

Callers invoking `git_pkt_parse_line` are currently not prepared
to handle this case as they do not explicitly check this case.
While they could always reset the passed out-pointer to `NULL`
before calling `git_pkt_parse_line` and determine if the pointer
has been set afterwards, it makes more sense to update
`git_pkt_parse_line` to set the out-pointer to `NULL` itself when
it encounters such an empty packet. Like this it is guaranteed
that there will be no invalid memory references to free'd
pointers.

As such, the issue has been fixed such that `git_pkt_parse_line`
always sets the packet out pointer to `NULL` when an empty packet
has been received and callers check for this condition, skipping
such packets.
src/transports/smart_pkt.c
src/transports/smart_protocol.c