Commit 6f5afc9a authored by Guido van Rossum's avatar Guido van Rossum

* ceval.c: ifdef out the last argument passing compat hack.

* Fixed memory leaks in socket, select and sv modules: mkvalue("O", v)
  does INCREF(v) so if v is brand new it should be XDECREF'd
parent 995c33a2
...@@ -112,6 +112,7 @@ select_select(self, args) ...@@ -112,6 +112,7 @@ select_select(self, args)
{ {
object *fd2obj[FD_SETSIZE]; object *fd2obj[FD_SETSIZE];
object *ifdlist, *ofdlist, *efdlist; object *ifdlist, *ofdlist, *efdlist;
object *ret;
fd_set ifdset, ofdset, efdset; fd_set ifdset, ofdset, efdset;
double timeout; double timeout;
struct timeval tv, *tvp; struct timeval tv, *tvp;
...@@ -168,8 +169,11 @@ select_select(self, args) ...@@ -168,8 +169,11 @@ select_select(self, args)
ifdlist = set2list(&ifdset, imax, fd2obj); ifdlist = set2list(&ifdset, imax, fd2obj);
ofdlist = set2list(&ofdset, omax, fd2obj); ofdlist = set2list(&ofdset, omax, fd2obj);
efdlist = set2list(&efdset, emax, fd2obj); efdlist = set2list(&efdset, emax, fd2obj);
ret = mkvalue("OOO", ifdlist, ofdlist, efdlist);
return mkvalue("OOO", ifdlist, ofdlist, efdlist); XDECREF(ifdlist);
XDECREF(ofdlist);
XDECREF(efdlist);
return ret;
} }
......
...@@ -223,7 +223,10 @@ makesockaddr(addr, addrlen) ...@@ -223,7 +223,10 @@ makesockaddr(addr, addrlen)
case AF_INET: case AF_INET:
{ {
struct sockaddr_in *a = (struct sockaddr_in *) addr; struct sockaddr_in *a = (struct sockaddr_in *) addr;
return mkvalue("Oi", makeipaddr(a), ntohs(a->sin_port)); object *addr = makeipaddr(a);
object *ret = mkvalue("Oi", addr, ntohs(a->sin_port));
XDECREF(addr);
return ret;
} }
case AF_UNIX: case AF_UNIX:
...@@ -342,7 +345,7 @@ sock_accept(s, args) ...@@ -342,7 +345,7 @@ sock_accept(s, args)
{ {
char addrbuf[256]; char addrbuf[256];
int addrlen, newfd; int addrlen, newfd;
object *res; object *sock, *addr, *res;
if (!getnoarg(args)) if (!getnoarg(args))
return NULL; return NULL;
if (!getsockaddrlen(s, &addrlen)) if (!getsockaddrlen(s, &addrlen))
...@@ -354,13 +357,16 @@ sock_accept(s, args) ...@@ -354,13 +357,16 @@ sock_accept(s, args)
return socket_error(); return socket_error();
/* Create the new object with unspecified family, /* Create the new object with unspecified family,
to avoid calls to bind() etc. on it. */ to avoid calls to bind() etc. on it. */
res = mkvalue("OO", (object *) newsockobject(newfd, sock = (object *) newsockobject(newfd,
s->sock_family, s->sock_family,
s->sock_type, s->sock_type,
s->sock_proto), s->sock_proto);
makesockaddr((struct sockaddr *) addrbuf, addrlen)); if (sock == NULL)
if (res == NULL)
close(newfd); close(newfd);
addr = makesockaddr((struct sockaddr *) addrbuf, addrlen);
res = mkvalue("OO", sock, addr);
XDECREF(sock);
XDECREF(addr);
return res; return res;
} }
...@@ -693,7 +699,7 @@ sock_recvfrom(s, args) ...@@ -693,7 +699,7 @@ sock_recvfrom(s, args)
object *args; object *args;
{ {
char addrbuf[256]; char addrbuf[256];
object *buf; object *buf, *addr, *ret;
int addrlen, len, n; int addrlen, len, n;
if (!getintarg(args, &len)) if (!getintarg(args, &len))
return NULL; return NULL;
...@@ -708,8 +714,11 @@ sock_recvfrom(s, args) ...@@ -708,8 +714,11 @@ sock_recvfrom(s, args)
return socket_error(); return socket_error();
if (resizestring(&buf, n) < 0) if (resizestring(&buf, n) < 0)
return NULL; return NULL;
return mkvalue("OO", buf, addr = makesockaddr((struct sockaddr *)addrbuf, addrlen);
makesockaddr((struct sockaddr *)addrbuf, addrlen)); ret = mkvalue("OO", buf, addr);
XDECREF(addr);
XDECREF(buf);
return ret;
} }
......
...@@ -126,7 +126,7 @@ svc_GetFields(self, args) ...@@ -126,7 +126,7 @@ svc_GetFields(self, args)
captureobject *self; captureobject *self;
object *args; object *args;
{ {
object *f1, *f2; object *f1, *f2, *ret;
int fieldsize; int fieldsize;
if (self->ob_info.format != SV_RGB8_FRAMES) { if (self->ob_info.format != SV_RGB8_FRAMES) {
...@@ -136,14 +136,11 @@ svc_GetFields(self, args) ...@@ -136,14 +136,11 @@ svc_GetFields(self, args)
fieldsize = self->ob_info.width * self->ob_info.height / 2; fieldsize = self->ob_info.width * self->ob_info.height / 2;
f1 = newsizedstringobject((char *) self->ob_capture, fieldsize); f1 = newsizedstringobject((char *) self->ob_capture, fieldsize);
if (f1 == NULL)
return NULL;
f2 = newsizedstringobject((char *) self->ob_capture + fieldsize, fieldsize); f2 = newsizedstringobject((char *) self->ob_capture + fieldsize, fieldsize);
if (f2 == NULL) { ret = mkvalue("(OO)", f1, f2);
DECREF(f1); XDECREF(f1);
return NULL; XDECREF(f2);
} return ret;
return mkvalue("(OO)", f1, f2);
} }
static object * static object *
......
...@@ -786,13 +786,6 @@ eval_code(co, globals, locals, arg) ...@@ -786,13 +786,6 @@ eval_code(co, globals, locals, arg)
break; break;
case UNPACK_ARG: case UNPACK_ARG:
/* Implement various compatibility hacks:
(a) f(a,b,...) should accept f((1,2,...))
(b) f((a,b,...)) should accept f(1,2,...)
(c) f(self,(a,b,...)) should accept f(x,1,2,...)
Actually, (c) is dangerous, and (b) seems
unnecessary, but (a) can't be missed...
*/
{ {
int n; int n;
if (EMPTY()) { if (EMPTY()) {
...@@ -809,6 +802,12 @@ eval_code(co, globals, locals, arg) ...@@ -809,6 +802,12 @@ eval_code(co, globals, locals, arg)
break; break;
} }
n = gettuplesize(v); n = gettuplesize(v);
#ifdef COMPAT_HACKS
/* Implement various compatibility hacks (for 0.9.4 or earlier):
(a) f(a,b,...) accepts f((1,2,...))
(b) f((a,b,...)) accepts f(1,2,...)
(c) f(self,(a,b,...)) accepts f(x,1,2,...)
*/
if (n == 1 && oparg != 1) { if (n == 1 && oparg != 1) {
/* Rule (a) */ /* Rule (a) */
w = gettupleitem(v, 0); w = gettupleitem(v, 0);
...@@ -819,7 +818,6 @@ eval_code(co, globals, locals, arg) ...@@ -819,7 +818,6 @@ eval_code(co, globals, locals, arg)
n = gettuplesize(v); n = gettuplesize(v);
} }
} }
#ifdef COMPAT_HACKS /* Compatibility hacks no longer needed (I think) */
else if (n != 1 && oparg == 1) { else if (n != 1 && oparg == 1) {
/* Rule (b) */ /* Rule (b) */
PUSH(v); PUSH(v);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment