| Index: net/socket/ssl_client_socket_nss.cc
|
| ===================================================================
|
| --- net/socket/ssl_client_socket_nss.cc (revision 43053)
|
| +++ net/socket/ssl_client_socket_nss.cc (working copy)
|
| @@ -319,9 +319,23 @@
|
| int err = transport_->GetPeerAddress(&peer_address);
|
| if (err != OK)
|
| return err;
|
| +
|
| const struct addrinfo* ai = peer_address.head();
|
| - memio_SetPeerName(nss_fd_, ai->ai_addr, ai->ai_addrlen);
|
|
|
| + PRNetAddr peername;
|
| + memset(&peername, 0, sizeof(peername));
|
| + DCHECK_LE(ai->ai_addrlen, sizeof(peername));
|
| + size_t len = std::min(static_cast<size_t>(ai->ai_addrlen), sizeof(peername));
|
| + memcpy(&peername, ai->ai_addr, len);
|
| +
|
| + // Adjust the address family field for BSD, whose sockaddr
|
| + // structure has a one-byte length and one-byte address family
|
| + // field at the beginning. PRNetAddr has a two-byte address
|
| + // family field at the beginning.
|
| + peername.raw.family = ai->ai_addr->sa_family;
|
| +
|
| + memio_SetPeerName(nss_fd_, &peername);
|
| +
|
| // Grab pointer to buffers
|
| nss_bufs_ = memio_GetSecret(nss_fd_);
|
|
|
|
|