]> git.pld-linux.org Git - packages/php.git/blob - php-5.3.6-bug-54092.patch
use /usr/sbin/php-fpm as other branches
[packages/php.git] / php-5.3.6-bug-54092.patch
1 --- PHP_5_3/ext/standard/ftp_fopen_wrapper.c    2011/02/27 20:10:08     308733
2 +++ PHP_5_3/ext/standard/ftp_fopen_wrapper.c    2011/02/27 20:23:54     308734
3 @@ -72,6 +72,12 @@
4  #define FTPS_ENCRYPT_DATA 1
5  #define GET_FTP_RESULT(stream) get_ftp_result((stream), tmp_line, sizeof(tmp_line) TSRMLS_CC)
6  
7 +typedef struct _php_ftp_dirstream_data {
8 +       php_stream *datastream;
9 +       php_stream *controlstream;
10 +       php_stream *dirstream;
11 +} php_ftp_dirstream_data;
12 +
13  /* {{{ get_ftp_result
14   */
15  static inline int get_ftp_result(php_stream *stream, char *buffer, size_t buffer_size TSRMLS_DC)
16 @@ -97,7 +103,7 @@
17   */
18  static int php_stream_ftp_stream_close(php_stream_wrapper *wrapper, php_stream *stream TSRMLS_DC)
19  {
20 -       php_stream *controlstream = (php_stream *)stream->wrapperdata;
21 +       php_stream *controlstream = stream->wrapperthis;
22         int ret = 0;
23         
24         if (controlstream) {
25 @@ -106,10 +112,6 @@
26                         int result;
27  
28                         /* For write modes close data stream first to signal EOF to server */
29 -                       stream->wrapperdata = NULL;
30 -                       php_stream_close(stream);
31 -                       stream = NULL;
32 -
33                         result = GET_FTP_RESULT(controlstream);
34                         if (result != 226 && result != 250) {
35                                 php_error_docref(NULL TSRMLS_CC, E_WARNING, "FTP server error %d:%s", result, tmp_line);
36 @@ -119,9 +121,7 @@
37  
38                 php_stream_write_string(controlstream, "QUIT\r\n");
39                 php_stream_close(controlstream);
40 -               if (stream) {
41 -                       stream->wrapperdata = NULL;
42 -               }
43 +               stream->wrapperthis = NULL;
44         }
45  
46         return ret;
47 @@ -584,7 +584,7 @@
48         }
49  
50         /* remember control stream */   
51 -       datastream->wrapperdata = (zval *)stream;
52 +       datastream->wrapperthis = stream;
53  
54         php_url_free(resource);
55         return datastream;
56 @@ -608,11 +608,13 @@
57  static size_t php_ftp_dirstream_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
58  {
59         php_stream_dirent *ent = (php_stream_dirent *)buf;
60 -       php_stream *innerstream = (php_stream *)stream->abstract;
61 +       php_stream *innerstream;
62         size_t tmp_len;
63         char *basename;
64         size_t basename_len;
65  
66 +       innerstream =  ((php_ftp_dirstream_data *)stream->abstract)->datastream;
67 +
68         if (count != sizeof(php_stream_dirent)) {
69                 return 0;
70         }
71 @@ -656,13 +658,18 @@
72   */
73  static int php_ftp_dirstream_close(php_stream *stream, int close_handle TSRMLS_DC)
74  {
75 -       php_stream *innerstream = (php_stream *)stream->abstract;
76 +       php_ftp_dirstream_data *data = stream->abstract;
77  
78 -       if (innerstream->wrapperdata) {
79 -               php_stream_close((php_stream *)innerstream->wrapperdata);
80 -               innerstream->wrapperdata = NULL;
81 -       }
82 -       php_stream_close((php_stream *)stream->abstract);
83 +       /* close control connection */
84 +       if (data->controlstream) {
85 +               php_stream_close(data->controlstream);
86 +               data->controlstream = NULL;
87 +       }
88 +       /* close data connection */
89 +       php_stream_close(data->datastream);
90 +       data->datastream = NULL;
91 +       
92 +       efree(data);
93         stream->abstract = NULL;
94  
95         return 0;
96 @@ -688,6 +695,7 @@
97  php_stream * php_stream_ftp_opendir(php_stream_wrapper *wrapper, char *path, char *mode, int options, char **opened_path, php_stream_context *context STREAMS_DC TSRMLS_DC)
98  {
99         php_stream *stream, *reuseid, *datastream = NULL;
100 +       php_ftp_dirstream_data *dirsdata;
101         php_url *resource = NULL;
102         int result = 0, use_ssl, use_ssl_on_data = 0;
103         char *hoststart = NULL, tmp_line[512];
104 @@ -747,11 +755,14 @@
105                 goto opendir_errexit;
106         }
107  
108 -       /* remember control stream */   
109 -       datastream->wrapperdata = (zval *)stream;
110 -
111         php_url_free(resource);
112 -       return php_stream_alloc(&php_ftp_dirstream_ops, datastream, 0, mode);
113 +
114 +       dirsdata = emalloc(sizeof *dirsdata);
115 +       dirsdata->datastream = datastream;
116 +       dirsdata->controlstream = stream;
117 +       dirsdata->dirstream = php_stream_alloc(&php_ftp_dirstream_ops, dirsdata, 0, mode);
118 +
119 +       return dirsdata->dirstream;
120  
121  opendir_errexit:
122         if (resource) {
This page took 0.038384 seconds and 3 git commands to generate.