fix leaks
[m6w6/ext-http] / php_http_env_response.c
index 5b4682084278d460c6672caafa745177fd289c9a..9f01814cb703a0dc6e86d8f0a468fe4b42b76975 100644 (file)
@@ -207,7 +207,9 @@ php_http_cache_status_t php_http_env_is_response_cached_by_last_modified(zval *o
 
 static zend_bool php_http_env_response_is_cacheable(php_http_env_response_t *r, php_http_message_t *request)
 {
-       if (r->ops->get_status(r) >= 400) {
+       long status = r->ops->get_status(r);
+
+       if (status && status / 100 != 2) {
                return 0;
        }
 
@@ -1157,7 +1159,12 @@ static PHP_METHOD(HttpEnvResponse, __invoke)
                PHP_HTTP_ENV_RESPONSE_OBJECT_INIT(obj);
 
                php_http_message_object_init_body_object(obj);
-               php_http_message_body_append(obj->message->body, ob_str, ob_len);
+
+               if (ob_flags & PHP_OUTPUT_HANDLER_CLEAN) {
+                       php_stream_truncate_set_size(php_http_message_body_stream(obj->message->body), 0);
+               } else {
+                       php_http_message_body_append(obj->message->body, ob_str, ob_len);
+               }
                RETURN_TRUE;
        }
 }
@@ -1330,7 +1337,7 @@ static PHP_METHOD(HttpEnvResponse, setCookie)
        case IS_ARRAY:
                list = php_http_cookie_list_from_struct(NULL, zcookie_new);
                zcookie_new = &tmp;
-               ZVAL_OBJECT(zcookie_new, &php_http_cookie_object_new_ex(php_http_cookie_class_entry, list)->zo, 1);
+               ZVAL_OBJECT(zcookie_new, &php_http_cookie_object_new_ex(php_http_cookie_class_entry, list)->zo, 0);
                break;
 
        default:
@@ -1338,7 +1345,7 @@ static PHP_METHOD(HttpEnvResponse, setCookie)
                list = php_http_cookie_list_parse(NULL, zs->val, zs->len, 0, NULL);
                zend_string_release(zs);
                zcookie_new = &tmp;
-               ZVAL_OBJECT(zcookie_new, &php_http_cookie_object_new_ex(php_http_cookie_class_entry, list)->zo, 1);
+               ZVAL_OBJECT(zcookie_new, &php_http_cookie_object_new_ex(php_http_cookie_class_entry, list)->zo, 0);
        }
        zend_restore_error_handling(&zeh);