- some minor strlen() and strlcat() tweaks
authorMichael Wallner <mike@php.net>
Sun, 9 Oct 2005 09:00:40 +0000 (09:00 +0000)
committerMichael Wallner <mike@php.net>
Sun, 9 Oct 2005 09:00:40 +0000 (09:00 +0000)
http_api.c
http_functions.c
http_request_method_api.c
http_request_object.c
http_send_api.c
php_http_request_method_api.h
php_http_send_api.h

index c5c63f95cd129ac8a72d8fc310d413971e27c0fd..9943cd8f49cf55a516ff9bb3f49edd16b017bcef 100644 (file)
@@ -195,7 +195,7 @@ void _http_log_ex(char *file, const char *ident, const char *message TSRMLS_DC)
        strftime(datetime, sizeof(datetime), "%Y-%m-%d %H:%M:%S", php_localtime_r(&now, &nowtm));
 
 #define HTTP_LOG_WRITE(file, type, msg) \
        strftime(datetime, sizeof(datetime), "%Y-%m-%d %H:%M:%S", php_localtime_r(&now, &nowtm));
 
 #define HTTP_LOG_WRITE(file, type, msg) \
-       if (file && strlen(file)) { \
+       if (file && *file) { \
                php_stream *log = php_stream_open_wrapper(file, "ab", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL); \
                 \
                if (log) { \
                php_stream *log = php_stream_open_wrapper(file, "ab", REPORT_ERRORS|ENFORCE_SAFE_MODE, NULL); \
                 \
                if (log) { \
index 2f8d679036c63446b74cd4bad423803ce5470a96..631de1456cdfd75c7502f4b3f0f573befb58da9a 100644 (file)
@@ -1254,7 +1254,7 @@ PHP_FUNCTION(http_put_stream)
 PHP_FUNCTION(http_request_method_register)
 {
        char *method;
 PHP_FUNCTION(http_request_method_register)
 {
        char *method;
-       int *method_len;
+       int method_len;
        unsigned long existing;
 
        if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &method, &method_len)) {
        unsigned long existing;
 
        if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &method, &method_len)) {
@@ -1264,7 +1264,7 @@ PHP_FUNCTION(http_request_method_register)
                RETURN_LONG((long) existing);
        }
 
                RETURN_LONG((long) existing);
        }
 
-       RETVAL_LONG((long) http_request_method_register(method));
+       RETVAL_LONG((long) http_request_method_register(method, method_len));
 }
 /* }}} */
 
 }
 /* }}} */
 
index 39c9aceb526a489bcce1d11c581d030e66dac131..a2197c6425324305a4bfb6b15c10d14b48bb2048 100644 (file)
@@ -155,29 +155,28 @@ PHP_HTTP_API unsigned long _http_request_method_exists(zend_bool by_name, unsign
 /* }}} */
 
 /* {{{ unsigned long http_request_method_register(char *) */
 /* }}} */
 
 /* {{{ unsigned long http_request_method_register(char *) */
-PHP_HTTP_API unsigned long _http_request_method_register(const char *method_name TSRMLS_DC)
+PHP_HTTP_API unsigned long _http_request_method_register(const char *method_name, size_t method_name_len TSRMLS_DC)
 {
        zval array;
        char *http_method, *method;
 {
        zval array;
        char *http_method, *method;
-       int i, method_len = strlen(method_name);
-       unsigned long meth_num = HTTP_G(request).methods.custom.nNextFreeElement + HTTP_MAX_REQUEST_METHOD;
+       unsigned long i, meth_num = HTTP_G(request).methods.custom.nNextFreeElement + HTTP_MAX_REQUEST_METHOD;
 
 
-       method = emalloc(method_len + 1);
-       for (i = 0; i < method_len; ++i) {
+       method = emalloc(method_name_len + 1);
+       for (i = 0; i < method_name_len; ++i) {
                method[i] = toupper(method_name[i]);
        }
                method[i] = toupper(method_name[i]);
        }
-       method[method_len] = '\0';
+       method[method_name_len] = '\0';
        
        INIT_ZARR(array, &HTTP_G(request).methods.custom);
        
        INIT_ZARR(array, &HTTP_G(request).methods.custom);
-       add_next_index_stringl(&array, method, method_len, 0);
+       add_next_index_stringl(&array, method, method_name_len, 0);
 
 
-       method_len = spprintf(&http_method, 0, "HTTP_METH_%s", method);
-       zend_register_long_constant(http_method, method_len + 1, meth_num, CONST_CS, http_module_number TSRMLS_CC);
+       method_name_len = spprintf(&http_method, 0, "HTTP_METH_%s", method);
+       zend_register_long_constant(http_method, method_name_len + 1, meth_num, CONST_CS, http_module_number TSRMLS_CC);
        efree(http_method);
        
 #if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL) && !defined(WONKY)
        efree(http_method);
        
 #if defined(ZEND_ENGINE_2) && defined(HTTP_HAVE_CURL) && !defined(WONKY)
-       method_len = spprintf(&http_method, 0, "METH_%s", method);
-       zend_declare_class_constant_long(http_request_object_ce, http_method, method_len, meth_num TSRMLS_CC);
+       method_name_len = spprintf(&http_method, 0, "METH_%s", method);
+       zend_declare_class_constant_long(http_request_object_ce, http_method, method_name_len, meth_num TSRMLS_CC);
        efree(http_method);
 #endif
 
        efree(http_method);
 #endif
 
index 7b1d82bec99ac92b1c4d3a909bea9d8f87a041af..37e2a58bd75c031f3b8a11828ca75ecf647b2eac 100644 (file)
@@ -501,13 +501,13 @@ STATUS _http_request_object_requesthandler(http_request_object *obj, zval *this_
        if (status == SUCCESS) {
                zval *qdata = convert_to_type_ex(IS_STRING, GET_PROP(obj, queryData));
                
        if (status == SUCCESS) {
                zval *qdata = convert_to_type_ex(IS_STRING, GET_PROP(obj, queryData));
                
-               if (Z_STRLEN_P(qdata) && (strlen(request_uri) < HTTP_URI_MAXLEN)) {
+               if (Z_STRLEN_P(qdata)) {
                        if (!strchr(request_uri, '?')) {
                        if (!strchr(request_uri, '?')) {
-                               strcat(request_uri, "?");
+                               strlcat(request_uri, "?", HTTP_URI_MAXLEN);
                        } else {
                        } else {
-                               strcat(request_uri, "&");
+                               strlcat(request_uri, "&", HTTP_URI_MAXLEN);
                        }
                        }
-                       strncat(request_uri, Z_STRVAL_P(qdata), HTTP_URI_MAXLEN - strlen(request_uri));
+                       strlcat(request_uri, Z_STRVAL_P(qdata), HTTP_URI_MAXLEN);
                }
                
                status = http_request_init(obj->ch, Z_LVAL_P(meth), request_uri, body, Z_ARRVAL_P(GET_PROP(obj, options)));
                }
                
                status = http_request_init(obj->ch, Z_LVAL_P(meth), request_uri, body, Z_ARRVAL_P(GET_PROP(obj, options)));
index 6fc9cc00916f3bfbc23ebf30b817bf1a780d0623..0c4306f86afd130eac668d076423f58cdc3f7ed8 100644 (file)
@@ -156,8 +156,8 @@ PHP_HTTP_API STATUS _http_send_header_ex(const char *name, size_t name_len, cons
        char *header = emalloc(header_len + 1);
 
        header[header_len] = '\0';
        char *header = emalloc(header_len + 1);
 
        header[header_len] = '\0';
-       snprintf(header, header_len, "%s: %s", name, value);
-       ret = http_send_header_string_ex(header, replace);
+       header_len = snprintf(header, header_len, "%s: %s", name, value);
+       ret = http_send_header_string_ex(header, header_len, replace);
        if (sent_header) {
                *sent_header = header;
        } else {
        if (sent_header) {
                *sent_header = header;
        } else {
@@ -168,10 +168,10 @@ PHP_HTTP_API STATUS _http_send_header_ex(const char *name, size_t name_len, cons
 /* }}} */
 
 /* {{{ STATUS http_send_status_header(int, char *) */
 /* }}} */
 
 /* {{{ STATUS http_send_status_header(int, char *) */
-PHP_HTTP_API STATUS _http_send_status_header_ex(int status, const char *header, zend_bool replace TSRMLS_DC)
+PHP_HTTP_API STATUS _http_send_status_header_ex(int status, const char *header, size_t header_len, zend_bool replace TSRMLS_DC)
 {
        STATUS ret;
 {
        STATUS ret;
-       sapi_header_line h = {(char *) header, header ? strlen(header) : 0, status};
+       sapi_header_line h = {(char *) header, header_len, status};
        if (SUCCESS != (ret = sapi_header_op(replace ? SAPI_HEADER_REPLACE : SAPI_HEADER_ADD, &h TSRMLS_CC))) {
                http_error_ex(HE_WARNING, HTTP_E_HEADER, "Could not send header: %s (%d)", header, status);
        }
        if (SUCCESS != (ret = sapi_header_op(replace ? SAPI_HEADER_REPLACE : SAPI_HEADER_ADD, &h TSRMLS_CC))) {
                http_error_ex(HE_WARNING, HTTP_E_HEADER, "Could not send header: %s (%d)", header, status);
        }
@@ -211,12 +211,10 @@ PHP_HTTP_API STATUS _http_send_etag_ex(const char *etag, size_t etag_len, char *
        }
 
        /* remember */
        }
 
        /* remember */
-       STR_FREE(HTTP_G(send).unquoted_etag);
-       HTTP_G(send).unquoted_etag = estrdup(etag);
+       STR_SET(HTTP_G(send).unquoted_etag, estrndup(etag, etag_len));
 
 
-       etag_header = ecalloc(1, sizeof("ETag: \"\"") + etag_len);
-       sprintf(etag_header, "ETag: \"%s\"", etag);
-       status = http_send_header_string(etag_header);
+       etag_len = spprintf(&etag_header, 0, "ETag: \"%s\"", etag);
+       status = http_send_header_string_ex(etag_header, etag_len, 1);
        
        if (sent_header) {
                *sent_header = etag_header;
        
        if (sent_header) {
                *sent_header = etag_header;
index 362b5dc6a4bba500cf228391ba277fa5dcc8d83f..ed0d8a7291b5dec1e246233e7f98b08ecda437f1 100644 (file)
@@ -69,8 +69,8 @@ PHP_HTTP_API const char *_http_request_method_name(http_request_method m TSRMLS_
 #define http_request_method_exists(u, l, c) _http_request_method_exists((u), (l), (c) TSRMLS_CC)
 PHP_HTTP_API unsigned long _http_request_method_exists(zend_bool by_name, unsigned long id, const char *name TSRMLS_DC);
 
 #define http_request_method_exists(u, l, c) _http_request_method_exists((u), (l), (c) TSRMLS_CC)
 PHP_HTTP_API unsigned long _http_request_method_exists(zend_bool by_name, unsigned long id, const char *name TSRMLS_DC);
 
-#define http_request_method_register(m) _http_request_method_register((m) TSRMLS_CC)
-PHP_HTTP_API unsigned long _http_request_method_register(const char *method TSRMLS_DC);
+#define http_request_method_register(m, l) _http_request_method_register((m), (l) TSRMLS_CC)
+PHP_HTTP_API unsigned long _http_request_method_register(const char *method, size_t method_name_len TSRMLS_DC);
 
 #define http_request_method_unregister(mn) _http_request_method_unregister((mn) TSRMLS_CC)
 PHP_HTTP_API STATUS _http_request_method_unregister(unsigned long method TSRMLS_DC);
 
 #define http_request_method_unregister(mn) _http_request_method_unregister((mn) TSRMLS_CC)
 PHP_HTTP_API STATUS _http_request_method_unregister(unsigned long method TSRMLS_DC);
index 8845afd9b5843e2067b748259cadb1cbc74ef863..0c5b1f5ec4f8d313e129366df16e58f46ce07d83 100644 (file)
@@ -31,11 +31,11 @@ typedef enum {
 #define http_send_header(n, v, r) _http_send_header_ex((n), strlen(n), (v), strlen(v), (r) TSRMLS_CC)
 #define http_send_header_ex(n, nl, v, vl, r, s) _http_send_header_ex((n), (nl), (v), (vl), (r), (s) TSRMLS_CC)
 PHP_HTTP_API STATUS _http_send_header_ex(const char *name, size_t name_len, const char *value, size_t value_len, zend_bool replace, char **sent_header TSRMLS_DC);
 #define http_send_header(n, v, r) _http_send_header_ex((n), strlen(n), (v), strlen(v), (r) TSRMLS_CC)
 #define http_send_header_ex(n, nl, v, vl, r, s) _http_send_header_ex((n), (nl), (v), (vl), (r), (s) TSRMLS_CC)
 PHP_HTTP_API STATUS _http_send_header_ex(const char *name, size_t name_len, const char *value, size_t value_len, zend_bool replace, char **sent_header TSRMLS_DC);
-#define http_send_header_string(h) _http_send_status_header_ex(0, (h), 1 TSRMLS_CC)
-#define http_send_header_string_ex(h, r) _http_send_status_header_ex(0, (h), (r) TSRMLS_CC)
-#define http_send_status_header(s, h) _http_send_status_header_ex((s), (h), 1 TSRMLS_CC)
-#define http_send_status_header_ex(s, h, r) _http_send_status_header_ex((s), (h), (r) TSRMLS_CC)
-PHP_HTTP_API STATUS _http_send_status_header_ex(int status, const char *header, zend_bool replace TSRMLS_DC);
+#define http_send_header_string(h) _http_send_status_header_ex(0, (h), strlen(h), 1 TSRMLS_CC)
+#define http_send_header_string_ex(h, l, r) _http_send_status_header_ex(0, (h), (l), (r) TSRMLS_CC)
+#define http_send_status_header(s, h) _http_send_status_header_ex((s), (h), (h)?strlen(h):0, 1 TSRMLS_CC)
+#define http_send_status_header_ex(s, h, l, r) _http_send_status_header_ex((s), (h), (l), (r) TSRMLS_CC)
+PHP_HTTP_API STATUS _http_send_status_header_ex(int status, const char *header, size_t header_len, zend_bool replace TSRMLS_DC);
 
 #define http_send_last_modified(t) _http_send_last_modified_ex((t), NULL TSRMLS_CC)
 #define http_send_last_modified_ex(t, s) _http_send_last_modified_ex((t), (s) TSRMLS_CC)
 
 #define http_send_last_modified(t) _http_send_last_modified_ex((t), NULL TSRMLS_CC)
 #define http_send_last_modified_ex(t, s) _http_send_last_modified_ex((t), (s) TSRMLS_CC)