[Rd] int overflow writing long vectors to socketConnection

Zafer Barutcuoglu z@|er@b@rutcuog|u @end|ng |rom gm@||@com
Tue Oct 12 08:04:40 CEST 2021


Writing >=2GB to a socketConnection (e.g. via writeBin) does not work correctly, because of this int typecast in modules/internet/sockconn.c:
> static size_t sock_write(const void *ptr, size_t size, size_t nitems,
> 			 Rconnection con)
> {
>     Rsockconn this = (Rsockconn)con->private;
>     ssize_t n = R_SockWrite(this->fd, ptr, (int)(size * nitems),
> 			    this->timeout)/((ssize_t)size);
>     return n > 0 ? n : 0;
> }
which seems uncalled for, given:
> ssize_t R_SockWrite(int sockp, const void *buf, size_t len, int timeout)

Is there a rationale for it, or should it be fixed?


	[[alternative HTML version deleted]]

More information about the R-devel mailing list