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

Reply via email to