- ditch the 1 byte leak
[m6w6/ext-http] / phpstr / phpstr.c
index 3e8e311ee464246e24ce0e9383e79039b46cf488..c0d9543f3d3e4a7e5b11b9d20b3aee68f3632c04 100644 (file)
@@ -4,7 +4,7 @@
 #include "php.h"
 #include "phpstr.h"
 
-PHPSTR_API phpstr *phpstr_init_ex(phpstr *buf, size_t chunk_size, zend_bool pre_alloc)
+PHPSTR_API phpstr *phpstr_init_ex(phpstr *buf, size_t chunk_size, int pre_alloc)
 {
        if (!buf) {
                buf = emalloc(sizeof(phpstr));
@@ -262,7 +262,7 @@ PHPSTR_API size_t phpstr_chunk_buffer(phpstr **s, const char *data, size_t data_
        
        if (!chunk_size) {
                phpstr_data(storage, chunk, &chunk_size);
-               phpstr_free(&storage);
+               phpstr_free(s);
                return chunk_size;
        }
        
@@ -284,10 +284,16 @@ PHPSTR_API void phpstr_chunked_output(phpstr **s, const char *data, size_t data_
        
        while (got = phpstr_chunk_buffer(s, data, data_len, &chunk, chunk_len)) {
                passthru(chunk, got TSRMLS_CC);
-               efree(chunk);
+               if (!chunk_len) {
+                       /*      we already got the last chunk,
+                               and freed all resources */
+                       break;
+               }
                data = NULL;
                data_len = 0;
+               STR_SET(chunk, NULL);
        }
+       STR_FREE(chunk);
 }
 
 /*