iliaa Mon Jan 6 21:21:58 2003 EDT Modified files: (Branch: PHP_4_3) /php4/ext/ftp ftp.c php_ftp.c Log: Changed perror() to php_error_docref(), fixed bug #21309. Made extension use ZE memory allocation wrappers, fixed a memory leak in ftp_mkdir. Removed duplicate ftp_syst() call inside ftp_systype(). # A larger patch with CS fixes will be applied to HEAD shortly. Index: php4/ext/ftp/ftp.c diff -u php4/ext/ftp/ftp.c:1.68.2.1 php4/ext/ftp/ftp.c:1.68.2.2 --- php4/ext/ftp/ftp.c:1.68.2.1 Tue Dec 31 11:34:34 2002 +++ php4/ext/ftp/ftp.c Mon Jan 6 21:21:57 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ftp.c,v 1.68.2.1 2002/12/31 16:34:34 sebastian Exp $ */ +/* $Id: ftp.c,v 1.68.2.2 2003/01/07 02:21:57 iliaa Exp $ */ #include "php.h" @@ -122,11 +122,7 @@ /* alloc the ftp structure */ - ftp = calloc(1, sizeof(*ftp)); - if (ftp == NULL) { - perror("calloc"); - return NULL; - } + ftp = ecalloc(1, sizeof(*ftp)); tv.tv_sec = timeout_sec; tv.tv_usec = 0; @@ -143,7 +139,7 @@ size = sizeof(ftp->localaddr); memset(&ftp->localaddr, 0, size); if (getsockname(ftp->fd, (struct sockaddr*) &ftp->localaddr, (unsigned int*)&size) == -1) { - perror("getsockname"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname failed: %s +(%d)\n", strerror(errno), errno); goto bail; } @@ -156,7 +152,7 @@ bail: if (ftp->fd != -1) closesocket(ftp->fd); - free(ftp); + efree(ftp); return NULL; } /* }}} */ @@ -179,7 +175,7 @@ closesocket(ftp->fd); } ftp_gc(ftp); - free(ftp); + efree(ftp); return NULL; } /* }}} */ @@ -192,10 +188,12 @@ if (ftp == NULL) return; - free(ftp->pwd); - ftp->pwd = NULL; - free(ftp->syst); - ftp->syst = NULL; + if (ftp->pwd) { + efree(ftp->pwd); + } + if (ftp->syst) { + efree(ftp->syst); + } } /* }}} */ @@ -212,8 +210,9 @@ if (!ftp_getresp(ftp) || ftp->resp != 221) return 0; - free(ftp->pwd); - ftp->pwd = NULL; + if (ftp->pwd) { + efree(ftp->pwd); + } return 1; } @@ -362,7 +361,7 @@ syst = ftp->inbuf; if ((end = strchr(syst, ' '))) *end = 0; - ftp->syst = strdup(syst); + ftp->syst = estrdup(syst); if (end) *end = ' '; @@ -392,9 +391,10 @@ /* copy out the pwd from response */ if ((pwd = strchr(ftp->inbuf, '"')) == NULL) return NULL; - end = strrchr(++pwd, '"'); + if ((end = strrchr(++pwd, '"')) == NULL) + return NULL; *end = 0; - ftp->pwd = strdup(pwd); + ftp->pwd = estrdup(pwd); *end = '"'; return ftp->pwd; @@ -425,7 +425,7 @@ if (ftp == NULL) return 0; - free(ftp->pwd); + efree(ftp->pwd); ftp->pwd = NULL; if (!ftp_putcmd(ftp, "CWD", dir)) @@ -445,7 +445,7 @@ if (ftp == NULL) return 0; - free(ftp->pwd); + efree(ftp->pwd); ftp->pwd = NULL; if (!ftp_putcmd(ftp, "CDUP", NULL)) @@ -474,13 +474,14 @@ /* copy out the dir from response */ if ((mkd = strchr(ftp->inbuf, '"')) == NULL) { - mkd = strdup(dir); + mkd = estrdup(dir); return mkd; } - - end = strrchr(++mkd, '"'); + if ((end = strrchr(++mkd, '"')) == NULL) { + return NULL; + } *end = 0; - mkd = strdup(mkd); + mkd = estrdup(mkd); *end = '"'; return mkd; @@ -668,6 +669,10 @@ ftp->data = data; if (resumepos>0) { + if (resumepos > 2147483647) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP cannot handle +files greater then 2147483647 bytes.\n"); + goto bail; + } sprintf(arg, "%u", resumepos); if (!ftp_putcmd(ftp, "REST", arg)) { goto bail; @@ -751,6 +756,10 @@ ftp->data = data; if (startpos>0) { + if (startpos > 2147483647) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP cannot handle +files with a size greater then 2147483647 bytes.\n"); + goto bail; + } sprintf(arg, "%u", startpos); if (!ftp_putcmd(ftp, "REST", arg)) { goto bail; @@ -1240,11 +1249,7 @@ return NULL; /* alloc the data structure */ - data = calloc(1, sizeof(*data)); - if (data == NULL) { - perror("calloc"); - return NULL; - } + data = ecalloc(1, sizeof(*data)); data->listener = -1; data->fd = -1; data->type = ftp->type; @@ -1252,7 +1257,7 @@ sa = (struct sockaddr *) &ftp->localaddr; /* bind/listen */ if ((fd = socket(sa->sa_family, SOCK_STREAM, 0)) == -1) { - perror("socket"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "socket() failed: %s +(%d)\n", strerror(errno), errno); goto bail; } @@ -1267,7 +1272,7 @@ tv.tv_sec = ftp->timeout_sec; tv.tv_usec = 0; if (php_connect_nonb(fd, (struct sockaddr*) &ftp->pasvaddr, size, &tv) == -1) { - perror("connect"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, +"php_connect_nonb() failed: %s (%d)\n", strerror(errno), errno); goto bail; } @@ -1285,17 +1290,17 @@ size = php_sockaddr_size(&addr); if (bind(fd, (struct sockaddr*) &addr, size) == -1) { - perror("bind"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "bind() failed: %s +(%d)\n", strerror(errno), errno); goto bail; } if (getsockname(fd, (struct sockaddr*) &addr, (unsigned int*)&size) == -1) { - perror("getsockname"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "getsockname() failed: %s +(%d)\n", strerror(errno), errno); goto bail; } if (listen(fd, 5) == -1) { - perror("listen"); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "listen() failed: %s +(%d)\n", strerror(errno), errno); goto bail; } @@ -1338,7 +1343,7 @@ bail: if (fd != -1) closesocket(fd); - free(data); + efree(data); return NULL; } /* }}} */ @@ -1365,7 +1370,7 @@ data->listener = -1; if (data->fd == -1) { - free(data); + efree(data); return NULL; } @@ -1437,7 +1442,7 @@ if (ftp) { ftp->data = NULL; } - free(data); + efree(data); return NULL; } /* }}} */ @@ -1505,11 +1510,7 @@ rewind(tmpfp); - ret = malloc((lines + 1) * sizeof(char**) + size * sizeof(char*)); - if (ret == NULL) { - perror("malloc"); - goto bail; - } + ret = emalloc((lines + 1) * sizeof(char**) + size * sizeof(char*)); entry = ret; text = (char*) (ret + lines + 1); @@ -1533,7 +1534,7 @@ fclose(tmpfp); if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) { - free(ret); + efree(ret); return NULL; } @@ -1541,7 +1542,7 @@ bail: data_close(ftp, data); fclose(tmpfp); - free(ret); + efree(ret); return NULL; } /* }}} */ @@ -1680,6 +1681,10 @@ goto bail; if (startpos>0) { + if (startpos > 2147483647) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "PHP cannot handle +files with a size greater then 2147483647 bytes.\n"); + goto bail; + } sprintf(arg, "%u", startpos); if (!ftp_putcmd(ftp, "REST", arg)) { goto bail; Index: php4/ext/ftp/php_ftp.c diff -u php4/ext/ftp/php_ftp.c:1.74.2.2 php4/ext/ftp/php_ftp.c:1.74.2.3 --- php4/ext/ftp/php_ftp.c:1.74.2.2 Tue Dec 31 11:34:35 2002 +++ php4/ext/ftp/php_ftp.c Mon Jan 6 21:21:58 2003 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ftp.c,v 1.74.2.2 2002/12/31 16:34:35 sebastian Exp $ */ +/* $Id: php_ftp.c,v 1.74.2.3 2003/01/07 02:21:58 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -351,7 +351,7 @@ RETURN_FALSE; } - RETURN_STRING(tmp, 1); + RETURN_STRING(tmp, 0); } /* }}} */ @@ -403,7 +403,7 @@ array_init(return_value); for (ptr = nlist; *ptr; ptr++) add_next_index_string(return_value, *ptr, 1); - free(nlist); + efree(nlist); } /* }}} */ @@ -431,7 +431,7 @@ array_init(return_value); for (ptr = llist; *ptr; ptr++) add_next_index_string(return_value, *ptr, 1); - free(llist); + efree(llist); } /* }}} */ @@ -449,7 +449,6 @@ ZEND_FETCH_RESOURCE(ftp, ftpbuf_t*, &z_ftp, -1, le_ftpbuf_name, le_ftpbuf); - syst = ftp_syst(ftp); if (NULL == (syst = ftp_syst(ftp))) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf); RETURN_FALSE;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php