iliaa           Mon Sep 25 16:02:19 2006 UTC

  Modified files:              
    /php-src/ext/standard       url.c 
  Log:
  MFB: Fixed bug #38891 (get_headers() do not work with curl-wrappers).
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/url.c?r1=1.96&r2=1.97&diff_format=u
Index: php-src/ext/standard/url.c
diff -u php-src/ext/standard/url.c:1.96 php-src/ext/standard/url.c:1.97
--- php-src/ext/standard/url.c:1.96     Sat Sep 23 11:58:49 2006
+++ php-src/ext/standard/url.c  Mon Sep 25 16:02:19 2006
@@ -15,7 +15,7 @@
    | Author: Jim Winstead <[EMAIL PROTECTED]>                                  
|
    +----------------------------------------------------------------------+
  */
-/* $Id: url.c,v 1.96 2006/09/23 11:58:49 tony2001 Exp $ */
+/* $Id: url.c,v 1.97 2006/09/25 16:02:19 iliaa Exp $ */
 
 #include <stdlib.h>
 #include <string.h>
@@ -661,8 +661,9 @@
        int url_len;
        php_stream_context *context;
        php_stream *stream;
-       zval **prev_val, **hdr = NULL;
+       zval **prev_val, **hdr = NULL, **h;
        HashPosition pos;
+       HashTable *hashT;
        long format = 0;
                 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &url, 
&url_len, &format) == FAILURE) {
@@ -676,10 +677,22 @@
 
        array_init(return_value);
 
-       zend_hash_internal_pointer_reset_ex(HASH_OF(stream->wrapperdata), &pos);
-       while (zend_hash_get_current_data_ex(HASH_OF(stream->wrapperdata), 
(void**)&hdr, &pos) != FAILURE) {
+       /* check for curl-wrappers that provide headers via a special "headers" 
element */
+       if (zend_hash_find(HASH_OF(stream->wrapperdata), "headers", 
sizeof("headers"), (void **)&h) != FAILURE && Z_TYPE_PP(h) == IS_ARRAY) {
+               /* curl-wrappers don't load data until the 1st read */ 
+               if (!Z_ARRVAL_PP(h)->nNumOfElements) {
+                       php_stream_getc(stream);
+               }
+               zend_hash_find(HASH_OF(stream->wrapperdata), "headers", 
sizeof("headers"), (void **)&h);
+               hashT = Z_ARRVAL_PP(h); 
+       } else {
+               hashT = HASH_OF(stream->wrapperdata);
+       }
+
+       zend_hash_internal_pointer_reset_ex(hashT, &pos);
+       while (zend_hash_get_current_data_ex(hashT, (void**)&hdr, &pos) != 
FAILURE) {
                if (!hdr || Z_TYPE_PP(hdr) != IS_STRING) {
-                       zend_hash_move_forward_ex(HASH_OF(stream->wrapperdata), 
&pos);
+                       zend_hash_move_forward_ex(hashT, &pos);
                        continue;
                }
 
@@ -710,7 +723,7 @@
                                goto no_name_header;
                        }
                }
-               zend_hash_move_forward_ex(HASH_OF(stream->wrapperdata), &pos);
+               zend_hash_move_forward_ex(hashT, &pos);
        }
 
        php_stream_close(stream);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to