From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> Gcc 9 needs some convincing that sopreprbuf really is going to fill in iov in the call from soreadbuf, even though the failure case shouldn't happen; so swing the check around initialising the fields.
Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> --- slirp/src/socket.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/slirp/src/socket.c b/slirp/src/socket.c index 4a3c935e25..4a2222a95f 100644 --- a/slirp/src/socket.c +++ b/slirp/src/socket.c @@ -113,12 +113,14 @@ size_t sopreprbuf(struct socket *so, struct iovec *iov, int *np) DEBUG_CALL("sopreprbuf"); DEBUG_ARG("so = %p", so); - if (len <= 0) - return 0; - iov[0].iov_base = sb->sb_wptr; + iov[0].iov_len = 0; iov[1].iov_base = NULL; iov[1].iov_len = 0; + + if (len <= 0) + return 0; + if (sb->sb_wptr < sb->sb_rptr) { iov[0].iov_len = sb->sb_rptr - sb->sb_wptr; /* Should never succeed, but... */ -- 2.21.0