iliaa Sat May 7 12:07:59 2005 EDT
Modified files:
/php-src/ext/standard ftp_fopen_wrapper.c
Log:
MFB: Fixed memory leak on error in FTP wrapper.
http://cvs.php.net/diff.php/php-src/ext/standard/ftp_fopen_wrapper.c?r1=1.81&r2=1.82&ty=u
Index: php-src/ext/standard/ftp_fopen_wrapper.c
diff -u php-src/ext/standard/ftp_fopen_wrapper.c:1.81
php-src/ext/standard/ftp_fopen_wrapper.c:1.82
--- php-src/ext/standard/ftp_fopen_wrapper.c:1.81 Fri May 6 14:42:52 2005
+++ php-src/ext/standard/ftp_fopen_wrapper.c Sat May 7 12:07:59 2005
@@ -18,7 +18,7 @@
| Sara Golemon <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: ftp_fopen_wrapper.c,v 1.81 2005/05/06 18:42:52 iliaa Exp $ */
+/* $Id: ftp_fopen_wrapper.c,v 1.82 2005/05/07 16:07:59 iliaa Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -112,7 +112,7 @@
{
php_stream *stream = NULL, *reuseid = NULL;
php_url *resource = NULL;
- int result, use_ssl, use_ssl_on_data = 0;
+ int result, use_ssl, use_ssl_on_data = 0, tmp_len;
char *scratch;
char tmp_line[512];
@@ -205,23 +205,24 @@
#endif
}
+#define PHP_FTP_CNTRL_CHK(val, val_len, err_msg) { \
+ unsigned char *s = val, *e = s + val_len; \
+ while (s < e) { \
+ if (iscntrl(*s)) { \
+ php_stream_wrapper_log_error(wrapper, options
TSRMLS_CC, err_msg, val); \
+ goto connect_errexit; \
+ } \
+ s++; \
+ } \
+}
+
/* send the user name */
php_stream_write_string(stream, "USER ");
if (resource->user != NULL) {
- unsigned char *s, *e;
- int user_len = php_raw_url_decode(resource->user,
strlen(resource->user));
-
- s = resource->user;
- e = s + user_len;
- /* check for control characters that should not be present in
the user name */
- while (s < e) {
- if (iscntrl(*s)) {
- php_stream_wrapper_log_error(wrapper, options
TSRMLS_CC, "Invalid login %s", resource->user);
- goto connect_errexit;
- }
- s++;
- }
-
+ tmp_len = php_raw_url_decode(resource->user,
strlen(resource->user));
+
+ PHP_FTP_CNTRL_CHK(resource->user, tmp_len, "Invalid login %s")
+
php_stream_write_string(stream, resource->user);
} else {
php_stream_write_string(stream, "anonymous");
@@ -237,7 +238,10 @@
php_stream_write_string(stream, "PASS ");
if (resource->pass != NULL) {
- php_raw_url_decode(resource->pass,
strlen(resource->pass));
+ tmp_len = php_raw_url_decode(resource->pass,
strlen(resource->pass));
+
+ PHP_FTP_CNTRL_CHK(resource->pass, tmp_len, "Invalid
password %s")
+
php_stream_write_string(stream, resource->pass);
} else {
/* if the user has configured who they are,
@@ -278,7 +282,11 @@
return stream;
- connect_errexit:
+connect_errexit:
+ if (resource) {
+ php_url_free(resource);
+ }
+
if (stream) {
php_stream_close(stream);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php