1
0
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:
Martin Ling 2020-01-24 04:44:47 +00:00
parent bf40b1cea9
commit 988ace6c9f

View File

@ -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)