[Rd] int overflow writing long vectors to socketConnection
Martin Maechler
m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Tue Oct 12 11:34:59 CEST 2021
>>>>> Zafer Barutcuoglu
>>>>> on Tue, 12 Oct 2021 02:04:40 -0400 writes:
> Hi,
> 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?
I've fixed it; it's clearly been a "typo" introduced at the
same when the type of 'len' in the R_SockWrite() header was
changed from int to size_t .. and the intent must have been to
do the same inside sock_write().
> Best,
> --
> Zafer
Thank you for the report!
Martin Maechler
ETH Zurich and R Core
More information about the R-devel
mailing list