]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-program-client: program-client-remote - Fix signed integer arithmetic.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Tue, 29 Jun 2021 20:45:33 +0000 (22:45 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Tue, 3 Aug 2021 13:03:03 +0000 (13:03 +0000)
Make type cast explicit to gain ubsan approval. Also prevent negative
reserve_mod from having unexpected effect.

src/lib-program-client/program-client-remote.c

index c29b19ebd1e08b709d5df2c5101f5d0567219879..858abe656973678b7df64e0f23ecf9554a7d46b8 100644 (file)
@@ -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;
                        }