Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fixed reading arbitrary data when parse a AF_BLUETOOTH address on NetBSD and
DragonFly BSD.
84 changes: 42 additions & 42 deletions 84 Modules/socketmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1005,7 +1005,7 @@ makeipaddr(struct sockaddr *addr, int addrlen)
an error occurred. */

static int
setbdaddr(char *name, bdaddr_t *bdaddr)
setbdaddr(const char *name, bdaddr_t *bdaddr)
{
unsigned int b0, b1, b2, b3, b4, b5;
char ch;
Expand Down Expand Up @@ -1062,7 +1062,7 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
#ifdef __BEOS__
/* XXX: BeOS version of accept() doesn't set family correctly */
addr->sa_family = AF_INET;
#endif
#endif /* __BEOS__ */

switch (addr->sa_family) {

Expand Down Expand Up @@ -1123,7 +1123,7 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
}
return ret;
}
#endif
#endif /* ENABLE_IPV6 */

#ifdef USE_BLUETOOTH
case AF_BLUETOOTH:
Expand Down Expand Up @@ -1162,11 +1162,11 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
struct sockaddr_hci *a = (struct sockaddr_hci *) addr;
#if defined(__NetBSD__) || defined(__DragonFly__)
return makebdaddr(&_BT_HCI_MEMB(a, bdaddr));
#else
#else /* __NetBSD__ || __DragonFly__ */
PyObject *ret = NULL;
ret = Py_BuildValue("i", _BT_HCI_MEMB(a, dev));
return ret;
#endif
#endif /* !(__NetBSD__ || __DragonFly__) */
}

#if !defined(__FreeBSD__)
Expand All @@ -1175,20 +1175,20 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
struct sockaddr_sco *a = (struct sockaddr_sco *) addr;
return makebdaddr(&_BT_SCO_MEMB(a, bdaddr));
}
#endif
#endif /* !__FreeBSD__ */

default:
PyErr_SetString(PyExc_ValueError,
"Unknown Bluetooth protocol");
return NULL;
}
#endif
#endif /* USE_BLUETOOTH */

#if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFNAME)
case AF_PACKET:
{
struct sockaddr_ll *a = (struct sockaddr_ll *)addr;
char *ifname = "";
const char *ifname = "";
struct ifreq ifr;
/* need to look up interface name give index */
if (a->sll_ifindex) {
Expand All @@ -1204,7 +1204,7 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
a->sll_addr,
a->sll_halen);
}
#endif
#endif /* HAVE_NETPACKET_PACKET_H && SIOCGIFNAME */

#ifdef HAVE_LINUX_TIPC_H
case AF_TIPC:
Expand Down Expand Up @@ -1237,7 +1237,7 @@ makesockaddr(int sockfd, struct sockaddr *addr, int addrlen, int proto)
return NULL;
}
}
#endif
#endif /* HAVE_LINUX_TIPC_H */

/* More cases here... */

Expand Down Expand Up @@ -1298,9 +1298,9 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
memcpy(addr->sun_path, path, len);
#if defined(PYOS_OS2)
*len_ret = sizeof(*addr);
#else
#else /* PYOS_OS2 */
*len_ret = len + offsetof(struct sockaddr_un, sun_path);
#endif
#endif /* !PYOS_OS2 */
return 1;
}
#endif /* AF_UNIX */
Expand All @@ -1327,7 +1327,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
*len_ret = sizeof(*addr);
return 1;
}
#endif
#endif /* AF_NETLINK */

case AF_INET:
{
Expand Down Expand Up @@ -1409,7 +1409,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
*len_ret = sizeof *addr;
return 1;
}
#endif
#endif /* ENABLE_IPV6 */

#ifdef USE_BLUETOOTH
case AF_BLUETOOTH:
Expand All @@ -1418,7 +1418,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
case BTPROTO_L2CAP:
{
struct sockaddr_l2 *addr;
char *straddr;
const char *straddr;

addr = (struct sockaddr_l2 *)addr_ret;
memset(addr, 0, sizeof(struct sockaddr_l2));
Expand All @@ -1438,7 +1438,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
case BTPROTO_RFCOMM:
{
struct sockaddr_rc *addr;
char *straddr;
const char *straddr;

addr = (struct sockaddr_rc *)addr_ret;
_BT_RC_MEMB(addr, family) = AF_BLUETOOTH;
Expand All @@ -1458,32 +1458,32 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
{
struct sockaddr_hci *addr = (struct sockaddr_hci *)addr_ret;
#if defined(__NetBSD__) || defined(__DragonFly__)
char *straddr = PyBytes_AS_STRING(args);

_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
if (straddr == NULL) {
PyErr_SetString(socket_error, "getsockaddrarg: "
const char *straddr;
_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
if (!PyBytes_Check(args)) {
PyErr_SetString(PyExc_OSError, "getsockaddrarg: "
"wrong format");
return 0;
}
straddr = PyBytes_AS_STRING(args);
if (setbdaddr(straddr, &_BT_HCI_MEMB(addr, bdaddr)) < 0)
return 0;
#else
#else /* __NetBSD__ || __DragonFly__ */
_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
if (!PyArg_ParseTuple(args, "i", &_BT_HCI_MEMB(addr, dev))) {
PyErr_SetString(socket_error, "getsockaddrarg: "
"wrong format");
return 0;
}
#endif
#endif /* !(__NetBSD__ || __DragonFly__) */
*len_ret = sizeof *addr;
return 1;
}
#if !defined(__FreeBSD__)
case BTPROTO_SCO:
{
struct sockaddr_sco *addr;
char *straddr;
const char *straddr;

addr = (struct sockaddr_sco *)addr_ret;
_BT_SCO_MEMB(addr, family) = AF_BLUETOOTH;
Expand All @@ -1499,20 +1499,20 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
*len_ret = sizeof *addr;
return 1;
}
#endif
#endif /* !__FreeBSD__ */
default:
PyErr_SetString(socket_error, "getsockaddrarg: unknown Bluetooth protocol");
return 0;
}
}
#endif
#endif /* USE_BLUETOOTH */

#if defined(HAVE_NETPACKET_PACKET_H) && defined(SIOCGIFINDEX)
case AF_PACKET:
{
struct sockaddr_ll* addr;
struct ifreq ifr;
char *interfaceName;
const char *interfaceName;
int protoNumber;
int hatype = 0;
int pkttype = 0;
Expand Down Expand Up @@ -1561,7 +1561,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
*len_ret = sizeof *addr;
return 1;
}
#endif
#endif /* HAVE_NETPACKET_PACKET_H && SIOCGIFINDEX */

#ifdef HAVE_LINUX_TIPC_H
case AF_TIPC:
Expand Down Expand Up @@ -1611,7 +1611,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,

return 1;
}
#endif
#endif /* HAVE_LINUX_TIPC_H */

/* More cases here... */

Expand Down Expand Up @@ -1646,7 +1646,7 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
*len_ret = sizeof (struct sockaddr_nl);
return 1;
}
#endif
#endif /* AF_NETLINK */

case AF_INET:
{
Expand All @@ -1660,7 +1660,7 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
*len_ret = sizeof (struct sockaddr_in6);
return 1;
}
#endif
#endif /* ENABLE_IPV6 */

#ifdef USE_BLUETOOTH
case AF_BLUETOOTH:
Expand All @@ -1681,31 +1681,31 @@ getsockaddrlen(PySocketSockObject *s, socklen_t *len_ret)
case BTPROTO_SCO:
*len_ret = sizeof (struct sockaddr_sco);
return 1;
#endif
#endif /* !__FreeBSD__ */
default:
PyErr_SetString(socket_error, "getsockaddrlen: "
"unknown BT protocol");
return 0;

}
}
#endif
#endif /* USE_BLUETOOTH */

#ifdef HAVE_NETPACKET_PACKET_H
case AF_PACKET:
{
*len_ret = sizeof (struct sockaddr_ll);
return 1;
}
#endif
#endif /* HAVE_NETPACKET_PACKET_H */

#ifdef HAVE_LINUX_TIPC_H
case AF_TIPC:
{
*len_ret = sizeof (struct sockaddr_tipc);
return 1;
}
#endif
#endif /* HAVE_LINUX_TIPC_H */

/* More cases here... */

Expand Down Expand Up @@ -3554,7 +3554,7 @@ socket_gethostbyaddr(PyObject *self, PyObject *args)
int result;
#endif
#endif /* HAVE_GETHOSTBYNAME_R */
char *ap;
const char *ap;
int al;
int af;

Expand Down Expand Up @@ -3623,7 +3623,7 @@ for a host. The host argument is a string giving a host name or IP number.");
static PyObject *
socket_getservbyname(PyObject *self, PyObject *args)
{
char *name, *proto=NULL;
const char *name, *proto=NULL;
struct servent *sp;
if (!PyArg_ParseTuple(args, "s|s:getservbyname", &name, &proto))
return NULL;
Expand Down Expand Up @@ -3654,7 +3654,7 @@ static PyObject *
socket_getservbyport(PyObject *self, PyObject *args)
{
int port;
char *proto=NULL;
const char *proto=NULL;
struct servent *sp;
if (!PyArg_ParseTuple(args, "i|s:getservbyport", &port, &proto))
return NULL;
Expand Down Expand Up @@ -3689,7 +3689,7 @@ otherwise any protocol will match.");
static PyObject *
socket_getprotobyname(PyObject *self, PyObject *args)
{
char *name;
const char *name;
struct protoent *sp;
#ifdef __BEOS__
/* Not available in BeOS yet. - [cjh] */
Expand Down Expand Up @@ -3964,7 +3964,7 @@ socket_inet_aton(PyObject *self, PyObject *args)
/* Have to use inet_addr() instead */
unsigned int packed_addr;
#endif
char *ip_addr;
const char *ip_addr;

if (!PyArg_ParseTuple(args, "s:inet_aton", &ip_addr))
return NULL;
Expand Down Expand Up @@ -4054,7 +4054,7 @@ static PyObject *
socket_inet_pton(PyObject *self, PyObject *args)
{
int af;
char* ip;
const char* ip;
int retval;
#ifdef ENABLE_IPV6
char packed[MAX(sizeof(struct in_addr), sizeof(struct in6_addr))];
Expand Down Expand Up @@ -4280,7 +4280,7 @@ socket_getnameinfo(PyObject *self, PyObject *args)
{
PyObject *sa = (PyObject *)NULL;
int flags;
char *hostp;
const char *hostp;
int port;
unsigned int flowinfo, scope_id;
char hbuf[NI_MAXHOST], pbuf[NI_MAXSERV];
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.