]> granicus.if.org Git - php/commitdiff
Changed perror() to php_error_docref(), fixed bug #21309.
authorIlia Alshanetsky <iliaa@php.net>
Tue, 7 Jan 2003 02:21:58 +0000 (02:21 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 7 Jan 2003 02:21:58 +0000 (02:21 +0000)
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.

ext/ftp/ftp.c
ext/ftp/php_ftp.c

index 72723b3009da4fcb4216fcb4fd431ed237e0955d..7078124a79773591eeb324fad2eed90b69dae095 100644 (file)
@@ -122,11 +122,7 @@ ftp_open(const char *host, short port, long timeout_sec TSRMLS_DC)
 
 
        /* 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 @@ ftp_open(const char *host, short port, long timeout_sec TSRMLS_DC)
        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 @@ ftp_open(const char *host, short port, long timeout_sec TSRMLS_DC)
 bail:
        if (ftp->fd != -1)
                closesocket(ftp->fd);
-       free(ftp);
+       efree(ftp);
        return NULL;
 }
 /* }}} */
@@ -179,7 +175,7 @@ ftp_close(ftpbuf_t *ftp)
                closesocket(ftp->fd);
        }       
        ftp_gc(ftp);
-       free(ftp);
+       efree(ftp);
        return NULL;
 }
 /* }}} */
@@ -192,10 +188,12 @@ ftp_gc(ftpbuf_t *ftp)
        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 @@ ftp_quit(ftpbuf_t *ftp)
        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 @@ ftp_syst(ftpbuf_t *ftp)
        syst = ftp->inbuf;
        if ((end = strchr(syst, ' ')))
                *end = 0;
-       ftp->syst = strdup(syst);
+       ftp->syst = estrdup(syst);
        if (end)
                *end = ' ';
 
@@ -392,9 +391,10 @@ ftp_pwd(ftpbuf_t *ftp)
        /* 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 @@ ftp_chdir(ftpbuf_t *ftp, const char *dir)
        if (ftp == NULL)
                return 0;
 
-       free(ftp->pwd);
+       efree(ftp->pwd);
        ftp->pwd = NULL;
 
        if (!ftp_putcmd(ftp, "CWD", dir))
@@ -445,7 +445,7 @@ ftp_cdup(ftpbuf_t *ftp)
        if (ftp == NULL)
                return 0;
 
-       free(ftp->pwd);
+       efree(ftp->pwd);
        ftp->pwd = NULL;
 
        if (!ftp_putcmd(ftp, "CDUP", NULL))
@@ -474,13 +474,14 @@ ftp_mkdir(ftpbuf_t *ftp, const char *dir)
 
        /* 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_get(ftpbuf_t *ftp, php_stream *outstream, const char *path, ftptype_t type,
        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_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type, i
        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 @@ ftp_getdata(ftpbuf_t *ftp)
                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 @@ ftp_getdata(ftpbuf_t *ftp)
        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 @@ ftp_getdata(ftpbuf_t *ftp)
                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 @@ ftp_getdata(ftpbuf_t *ftp)
        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 @@ ftp_getdata(ftpbuf_t *ftp)
 bail:
        if (fd != -1)
                closesocket(fd);
-       free(data);
+       efree(data);
        return NULL;
 }
 /* }}} */
@@ -1365,7 +1370,7 @@ data_accept(databuf_t *data, ftpbuf_t *ftp)
        data->listener = -1;
 
        if (data->fd == -1) {
-               free(data);
+               efree(data);
                return NULL;
        }
 
@@ -1437,7 +1442,7 @@ data_close(ftpbuf_t *ftp, databuf_t *data)
        if (ftp) {
                ftp->data = NULL;
        }
-       free(data);
+       efree(data);
        return NULL;
 }
 /* }}} */
@@ -1505,11 +1510,7 @@ ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path)
 
        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 @@ ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path)
        fclose(tmpfp);
 
        if (!ftp_getresp(ftp) || (ftp->resp != 226 && ftp->resp != 250)) {
-               free(ret);
+               efree(ret);
                return NULL;
        }
 
@@ -1541,7 +1542,7 @@ ftp_genlist(ftpbuf_t *ftp, const char *cmd, const char *path)
 bail:
        data_close(ftp, data);
        fclose(tmpfp);
-       free(ret);
+       efree(ret);
        return NULL;
 }
 /* }}} */
@@ -1680,6 +1681,10 @@ ftp_nb_put(ftpbuf_t *ftp, const char *path, php_stream *instream, ftptype_t type
                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 6d90aab252958257c8d7ba8b7b84ef2ebc93c546..03c86f7555e5489a288c14b57439f48992e422f4 100644 (file)
@@ -351,7 +351,7 @@ PHP_FUNCTION(ftp_mkdir)
                RETURN_FALSE;
        }
 
-       RETURN_STRING(tmp, 1);
+       RETURN_STRING(tmp, 0);
 }
 /* }}} */
 
@@ -403,7 +403,7 @@ PHP_FUNCTION(ftp_nlist)
        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 @@ PHP_FUNCTION(ftp_rawlist)
        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 @@ PHP_FUNCTION(ftp_systype)
 
        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;