From: Stephan Bosch Date: Tue, 29 Jun 2021 20:45:33 +0000 (+0200) Subject: lib-program-client: program-client-remote - Fix signed integer arithmetic. X-Git-Tag: 2.3.17~256 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bb6efaa41774af1981df1be26d6e5e11108c1b14;p=thirdparty%2Fdovecot%2Fcore.git lib-program-client: program-client-remote - Fix signed integer arithmetic. Make type cast explicit to gain ubsan approval. Also prevent negative reserve_mod from having unexpected effect. --- diff --git a/src/lib-program-client/program-client-remote.c b/src/lib-program-client/program-client-remote.c index c29b19ebd1..858abe6569 100644 --- a/src/lib-program-client/program-client-remote.c +++ b/src/lib-program-client/program-client-remote.c @@ -159,7 +159,7 @@ static ssize_t program_client_istream_read(struct istream_private *stream) reserved = (stream->buffer[pos - 1] == '\n' && pos > 1 ? 2 : 1); - reserve_mod = reserved - old_reserved; + reserve_mod = (ssize_t)reserved - (ssize_t)old_reserved; pos -= reserved; } if (ret == 0) { @@ -168,7 +168,7 @@ static ssize_t program_client_istream_read(struct istream_private *stream) not visible to application. */ break; } - if (ret >= reserve_mod) { + if (ret > 0 && ret >= reserve_mod) { /* Subtract additional reserved bytes */ ret -= reserve_mod; }