mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-06-30 11:02:48 -05:00
Tighten up a lot of casts from unsigned to int which are read by one
of the GET_32BIT macros and then used as length fields. Missing bounds checks against zero have been added, and also I've introduced a helper function toint() which casts from unsigned to int in such a way as to avoid C undefined behaviour, since I'm not sure I trust compilers any more to do the obviously sensible thing. [originally from svn r9918]
This commit is contained in:
@ -75,13 +75,12 @@ static int agent_select_result(int fd, int event)
|
||||
}
|
||||
conn->retlen += ret;
|
||||
if (conn->retsize == 4 && conn->retlen == 4) {
|
||||
conn->retsize = GET_32BIT(conn->retbuf);
|
||||
conn->retsize = toint(GET_32BIT(conn->retbuf) + 4);
|
||||
if (conn->retsize <= 0) {
|
||||
conn->retbuf = NULL;
|
||||
conn->retlen = 0;
|
||||
goto done;
|
||||
}
|
||||
conn->retsize += 4;
|
||||
assert(conn->retbuf == conn->sizebuf);
|
||||
conn->retbuf = snewn(conn->retsize, char);
|
||||
memcpy(conn->retbuf, conn->sizebuf, 4);
|
||||
|
Reference in New Issue
Block a user