[Python-checkins] python/dist/src/Modules socketmodule.c,1.237,1.238

loewis@users.sourceforge.net loewis@users.sourceforge.net
Sun, 28 Jul 2002 09:10:33 -0700


Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv31576/Modules

Modified Files:
	socketmodule.c 
Log Message:
Pass length of result structure into setipaddr. Fixes bug #565747.
Committed to 2.2 branch.


Index: socketmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/socketmodule.c,v
retrieving revision 1.237
retrieving revision 1.238
diff -C2 -d -r1.237 -r1.238
*** socketmodule.c	25 Jul 2002 16:37:51 -0000	1.237
--- socketmodule.c	28 Jul 2002 16:10:31 -0000	1.238
***************
*** 587,591 ****
  
  static int
! setipaddr(char *name, struct sockaddr *addr_ret, int af)
  {
  	struct addrinfo hints, *res;
--- 587,591 ----
  
  static int
! setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af)
  {
  	struct addrinfo hints, *res;
***************
*** 625,629 ****
  			return -1;
  		}
! 		memcpy(addr_ret, res->ai_addr, res->ai_addrlen);
  		freeaddrinfo(res);
  		return siz;
--- 625,631 ----
  			return -1;
  		}
! 		if (res->ai_addrlen < addr_ret_size)
! 			addr_ret_size = res->ai_addrlen;
! 		memcpy(addr_ret, res->ai_addr, addr_ret_size);
  		freeaddrinfo(res);
  		return siz;
***************
*** 660,664 ****
  		return -1;
  	}
! 	memcpy((char *) addr_ret, res->ai_addr, res->ai_addrlen);
  	freeaddrinfo(res);
  	switch (addr_ret->sa_family) {
--- 662,668 ----
  		return -1;
  	}
! 	if (res->ai_addrlen < addr_ret_size)
! 		addr_ret_size = res->ai_addrlen;
! 	memcpy((char *) addr_ret, res->ai_addr, addr_ret_size);
  	freeaddrinfo(res);
  	switch (addr_ret->sa_family) {
***************
*** 844,848 ****
  		if (!PyArg_ParseTuple(args, "si:getsockaddrarg", &host, &port))
  			return 0;
! 		if (setipaddr(host, (struct sockaddr *)addr, AF_INET) < 0)
  			return 0;
  		addr->sin_family = AF_INET;
--- 848,852 ----
  		if (!PyArg_ParseTuple(args, "si:getsockaddrarg", &host, &port))
  			return 0;
! 		if (setipaddr(host, (struct sockaddr *)addr, sizeof(*addr),  AF_INET) < 0)
  			return 0;
  		addr->sin_family = AF_INET;
***************
*** 865,869 ****
  			return 0;
  		}
! 		if (setipaddr(host, (struct sockaddr *)addr, AF_INET6) < 0)
  			return 0;
  		addr->sin6_family = s->sock_family;
--- 869,873 ----
  			return 0;
  		}
! 		if (setipaddr(host, (struct sockaddr *)addr,  sizeof(*addr), AF_INET6) < 0)
  			return 0;
  		addr->sin6_family = s->sock_family;
***************
*** 2047,2051 ****
  	if (!PyArg_ParseTuple(args, "s:gethostbyname", &name))
  		return NULL;
! 	if (setipaddr(name, (struct sockaddr *)&addrbuf, AF_INET) < 0)
  		return NULL;
  	return makeipaddr((struct sockaddr *)&addrbuf,
--- 2051,2055 ----
  	if (!PyArg_ParseTuple(args, "s:gethostbyname", &name))
  		return NULL;
! 	if (setipaddr(name, (struct sockaddr *)&addrbuf,  sizeof(addrbuf), AF_INET) < 0)
  		return NULL;
  	return makeipaddr((struct sockaddr *)&addrbuf,
***************
*** 2220,2224 ****
  	if (!PyArg_ParseTuple(args, "s:gethostbyname_ex", &name))
  		return NULL;
! 	if (setipaddr(name, (struct sockaddr *)&addr, PF_INET) < 0)
  		return NULL;
  	Py_BEGIN_ALLOW_THREADS
--- 2224,2228 ----
  	if (!PyArg_ParseTuple(args, "s:gethostbyname_ex", &name))
  		return NULL;
! 	if (setipaddr(name, (struct sockaddr *)&addr, sizeof(addr), PF_INET) < 0)
  		return NULL;
  	Py_BEGIN_ALLOW_THREADS
***************
*** 2296,2300 ****
  		return NULL;
  	af = PF_UNSPEC;
! 	if (setipaddr(ip_num, sa, af) < 0)
  		return NULL;
  	af = sa->sa_family;
--- 2300,2304 ----
  		return NULL;
  	af = PF_UNSPEC;
! 	if (setipaddr(ip_num, sa, sizeof(addr), af) < 0)
  		return NULL;
  	af = sa->sa_family;