From: Martin Ling Date: Fri, 24 Jan 2020 04:44:47 +0000 (+0000) Subject: windows: Avoid leak of write buffer on realloc failure. X-Git-Tag: libserialport-0.1.2~41 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=988ace6c9f8035e5835847d38a6dbf654ea216da;p=libserialport.git windows: Avoid leak of write buffer on realloc failure. VS2019 IntelliSense reported: Warning C6308: 'realloc' might return null pointer: assigning null pointer to 'port->write_buf', which is passed as an argument to 'realloc', will cause the original memory block to be leaked. This is correct, we would leak the buffer on a realloc failure. Put the realloc result in a separate variable and handle the error path before assigning the result to port->write_buf. --- diff --git a/serialport.c b/serialport.c index eee453a..422b767 100644 --- a/serialport.c +++ b/serialport.c @@ -1838,6 +1838,7 @@ static enum sp_return set_config(struct sp_port *port, struct port_data *data, DEBUG_FMT("Setting configuration for port %s", port->name); #ifdef _WIN32 + BYTE* new_buf; TRY(await_write_completion(port)); @@ -1854,11 +1855,10 @@ static enum sp_return set_config(struct sp_port *port, struct port_data *data, /* Allocate write buffer for 50ms of data at baud rate. */ port->write_buf_size = max(config->baudrate / (8 * 20), 1); - port->write_buf = realloc(port->write_buf, - port->write_buf_size); - - if (!port->write_buf) + new_buf = realloc(port->write_buf, port->write_buf_size); + if (!new_buf) RETURN_ERROR(SP_ERR_MEM, "Allocating write buffer failed"); + port->write_buf = new_buf; } if (config->bits >= 0)