int recv_int(int conn, long *data)
{
char buf[8];
+ int len;
- if (read(conn, buf, 8) != 8)
+ len = read(conn, buf, 8);
+ if (len == -1)
{
fail(conn, errno, "reading integer");
return errno;
}
+ else if (len < 8)
+ {
+ fail(conn, 0, "remote connection closed while reading integer");
+ return EIO;
+ }
getlong((buf + 4), *data);
return 0;
}
char tmp[4];
int size, more;
- if (read(conn, tmp, 4) != 4)
+ size = read(conn, tmp, 4);
+ if (size == -1)
{
fail(conn, errno, "reading string");
return errno;
}
- if (read(conn, tmp, 4) != 4)
+ else if (size < 4)
+ {
+ fail(conn, 0, "remote connection closed while reading string");
+ return EIO;
+ }
+
+ size = read(conn, tmp, 4);
+ if (size == -1)
{
fail(conn, errno, "reading string");
return errno;
}
+ else if (size < 4)
+ {
+ fail(conn, 0, "remote connection closed while reading string");
+ return EIO;
+ }
getlong(tmp, *len);
*buf = malloc(*len);