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