From 0b4a33889441f9b04f6d0344be80b60b2f4465b9 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sat, 26 Jan 2013 20:41:53 +0000 Subject: Only fill in apr_sockaddr_vars_set if we have valid data git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1438958 13f79535-47bb-0310-9956-ffa450edef68 --- network_io/unix/sendrecv.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'network_io') diff --git a/network_io/unix/sendrecv.c b/network_io/unix/sendrecv.c index d50f4f0f6..fc1c20b7d 100644 --- a/network_io/unix/sendrecv.c +++ b/network_io/unix/sendrecv.c @@ -174,7 +174,14 @@ apr_status_t apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, return errno; } - apr_sockaddr_vars_set(from, from->sa.sin.sin_family, ntohs(from->sa.sin.sin_port)); + /* + * Check if we have a valid address. recvfrom() with MSG_PEEK may return + * success without filling in the address. + */ + if (from->salen > APR_OFFSETOF(struct sockaddr_in, sin_port)) { + apr_sockaddr_vars_set(from, from->sa.sin.sin_family, + ntohs(from->sa.sin.sin_port)); + } (*len) = rv; if (rv == 0 && sock->type == SOCK_STREAM) { -- cgit v1.2.1