mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	Fix SF bug #1476111: SystemError in socket sendto. The AF_INET6 and
AF_PACKET cases in getsockaddrarg were missing their own checks for tuple-ness of the address argument, which means a confusing SystemError was raised by PyArg_ParseTuple instead.
This commit is contained in:
		
							parent
							
								
									3bbbc49060
								
							
						
					
					
						commit
						0452049b6f
					
				
					 1 changed files with 16 additions and 0 deletions
				
			
		| 
						 | 
					@ -1217,6 +1217,14 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
 | 
				
			||||||
		int port, flowinfo, scope_id, result;
 | 
							int port, flowinfo, scope_id, result;
 | 
				
			||||||
 		addr = (struct sockaddr_in6*)&(s->sock_addr).in6;
 | 
					 		addr = (struct sockaddr_in6*)&(s->sock_addr).in6;
 | 
				
			||||||
		flowinfo = scope_id = 0;
 | 
							flowinfo = scope_id = 0;
 | 
				
			||||||
 | 
							if (!PyTuple_Check(args)) {
 | 
				
			||||||
 | 
								PyErr_Format(
 | 
				
			||||||
 | 
									PyExc_TypeError,
 | 
				
			||||||
 | 
									"getsockaddrarg: "
 | 
				
			||||||
 | 
									"AF_INET6 address must be tuple, not %.500s",
 | 
				
			||||||
 | 
									args->ob_type->tp_name);
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if (!PyArg_ParseTuple(args, "eti|ii", 
 | 
							if (!PyArg_ParseTuple(args, "eti|ii", 
 | 
				
			||||||
				      "idna", &host, &port, &flowinfo,
 | 
									      "idna", &host, &port, &flowinfo,
 | 
				
			||||||
				      &scope_id)) {
 | 
									      &scope_id)) {
 | 
				
			||||||
| 
						 | 
					@ -1319,6 +1327,14 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
 | 
				
			||||||
		char *haddr = NULL;
 | 
							char *haddr = NULL;
 | 
				
			||||||
		unsigned int halen = 0;
 | 
							unsigned int halen = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!PyTuple_Check(args)) {
 | 
				
			||||||
 | 
								PyErr_Format(
 | 
				
			||||||
 | 
									PyExc_TypeError,
 | 
				
			||||||
 | 
									"getsockaddrarg: "
 | 
				
			||||||
 | 
									"AF_PACKET address must be tuple, not %.500s",
 | 
				
			||||||
 | 
									args->ob_type->tp_name);
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		if (!PyArg_ParseTuple(args, "si|iis#", &interfaceName,
 | 
							if (!PyArg_ParseTuple(args, "si|iis#", &interfaceName,
 | 
				
			||||||
				      &protoNumber, &pkttype, &hatype,
 | 
									      &protoNumber, &pkttype, &hatype,
 | 
				
			||||||
				      &haddr, &halen))
 | 
									      &haddr, &halen))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue