mirror of
git://sigrok.org/libserialport
synced 2023-08-10 21:13:24 +03:00
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.
This commit is contained in:
parent
bf40b1cea9
commit
988ace6c9f
@ -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);
|
DEBUG_FMT("Setting configuration for port %s", port->name);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
BYTE* new_buf;
|
||||||
|
|
||||||
TRY(await_write_completion(port));
|
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. */
|
/* Allocate write buffer for 50ms of data at baud rate. */
|
||||||
port->write_buf_size = max(config->baudrate / (8 * 20), 1);
|
port->write_buf_size = max(config->baudrate / (8 * 20), 1);
|
||||||
port->write_buf = realloc(port->write_buf,
|
new_buf = realloc(port->write_buf, port->write_buf_size);
|
||||||
port->write_buf_size);
|
if (!new_buf)
|
||||||
|
|
||||||
if (!port->write_buf)
|
|
||||||
RETURN_ERROR(SP_ERR_MEM, "Allocating write buffer failed");
|
RETURN_ERROR(SP_ERR_MEM, "Allocating write buffer failed");
|
||||||
|
port->write_buf = new_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config->bits >= 0)
|
if (config->bits >= 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user