mirror of
https://github.com/apache/httpd.git
synced 2025-08-07 04:02:58 +03:00
Define ap_method_mask_t (typedef for apr_uint64_t) and use for method
bitmasks rather than apr_int64_t. Fixes UBSan errors shifting to the top bit of a signed integer. * include/httpd.h: Add ap_method_mask_t, use it for AP_METHOD_BIT. (struct ap_method_mask_t): Likewise for method_mask field. (struct request_rec): Likewise for allowed field. * include/http_config.h (struct cmd_parms): Likewise for limited field. * include/ap_mmn.h: Bump MMN major. * modules/*/*.c: Adjust all method masks to use ap_method_mask_t. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1874114 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
5
CHANGES
5
CHANGES
@@ -1,6 +1,11 @@
|
|||||||
-*- coding: utf-8 -*-
|
-*- coding: utf-8 -*-
|
||||||
Changes with Apache 2.5.1
|
Changes with Apache 2.5.1
|
||||||
|
|
||||||
|
*) core: ap_method_mask_t type added for method bitmasks, changed
|
||||||
|
from apr_int64_t and used for the method_mask field in
|
||||||
|
ap_method_list_t, AP_METHOD_BIT, allowed field of request_rec,
|
||||||
|
limited field of cmd_parms. [Joe Orton]
|
||||||
|
|
||||||
*) mod_ssl: Do not keep connections to OCSP responders alive when doing
|
*) mod_ssl: Do not keep connections to OCSP responders alive when doing
|
||||||
OCSP requests. PR 64135. [Ruediger Pluem]
|
OCSP requests. PR 64135. [Ruediger Pluem]
|
||||||
|
|
||||||
|
@@ -621,14 +621,15 @@
|
|||||||
* 20190312.7 (2.5.1-dev) AP_REG_DEFAULT macro in ap_regex.h
|
* 20190312.7 (2.5.1-dev) AP_REG_DEFAULT macro in ap_regex.h
|
||||||
* 20190312.8 (2.5.1-dev) ap_is_chunked() in httpd.h
|
* 20190312.8 (2.5.1-dev) ap_is_chunked() in httpd.h
|
||||||
* 20190312.9 (2.5.1-dev) AP_REG_NO_DEFAULT macro in ap_regex.h
|
* 20190312.9 (2.5.1-dev) AP_REG_NO_DEFAULT macro in ap_regex.h
|
||||||
|
* 20200217.0 (2.5.1-dev) Add and use ap_method_mask_t type
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
|
#define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
|
||||||
|
|
||||||
#ifndef MODULE_MAGIC_NUMBER_MAJOR
|
#ifndef MODULE_MAGIC_NUMBER_MAJOR
|
||||||
#define MODULE_MAGIC_NUMBER_MAJOR 20190312
|
#define MODULE_MAGIC_NUMBER_MAJOR 20200217
|
||||||
#endif
|
#endif
|
||||||
#define MODULE_MAGIC_NUMBER_MINOR 9 /* 0...n */
|
#define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
|
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
|
||||||
|
@@ -295,7 +295,7 @@ struct cmd_parms_struct {
|
|||||||
/** Table of directives allowed per AllowOverrideList */
|
/** Table of directives allowed per AllowOverrideList */
|
||||||
apr_table_t *override_list;
|
apr_table_t *override_list;
|
||||||
/** Which methods are <Limit>ed */
|
/** Which methods are <Limit>ed */
|
||||||
apr_int64_t limited;
|
ap_method_mask_t limited;
|
||||||
/** methods which are limited */
|
/** methods which are limited */
|
||||||
apr_array_header_t *limited_xmethods;
|
apr_array_header_t *limited_xmethods;
|
||||||
/** methods which are xlimited */
|
/** methods which are xlimited */
|
||||||
|
@@ -637,10 +637,14 @@ AP_DECLARE(const char *) ap_get_server_built(void);
|
|||||||
*/
|
*/
|
||||||
#define METHODS 64
|
#define METHODS 64
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type used for method masks.
|
||||||
|
*/
|
||||||
|
typedef apr_uint64_t ap_method_mask_t;
|
||||||
/**
|
/**
|
||||||
* The method mask bit to shift for anding with a bitmask.
|
* The method mask bit to shift for anding with a bitmask.
|
||||||
*/
|
*/
|
||||||
#define AP_METHOD_BIT ((apr_int64_t)1)
|
#define AP_METHOD_BIT ((ap_method_mask_t)1)
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
||||||
@@ -656,7 +660,7 @@ typedef struct ap_method_list_t ap_method_list_t;
|
|||||||
*/
|
*/
|
||||||
struct ap_method_list_t {
|
struct ap_method_list_t {
|
||||||
/** The bitmask used for known methods */
|
/** The bitmask used for known methods */
|
||||||
apr_int64_t method_mask;
|
ap_method_mask_t method_mask;
|
||||||
/** the array used for extension methods */
|
/** the array used for extension methods */
|
||||||
apr_array_header_t *method_list;
|
apr_array_header_t *method_list;
|
||||||
};
|
};
|
||||||
@@ -886,7 +890,7 @@ struct request_rec {
|
|||||||
* HTTP_METHOD_NOT_ALLOWED. Unfortunately this means that a Script GET
|
* HTTP_METHOD_NOT_ALLOWED. Unfortunately this means that a Script GET
|
||||||
* handler can't be installed by mod_actions.
|
* handler can't be installed by mod_actions.
|
||||||
*/
|
*/
|
||||||
apr_int64_t allowed;
|
ap_method_mask_t allowed;
|
||||||
/** Array of extension methods */
|
/** Array of extension methods */
|
||||||
apr_array_header_t *allowed_xmethods;
|
apr_array_header_t *allowed_xmethods;
|
||||||
/** List of allowed methods */
|
/** List of allowed methods */
|
||||||
|
@@ -53,7 +53,7 @@ enum allowdeny_type {
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
apr_int64_t limited;
|
ap_method_mask_t limited;
|
||||||
union {
|
union {
|
||||||
char *from;
|
char *from;
|
||||||
apr_ipsubnet_t *ip;
|
apr_ipsubnet_t *ip;
|
||||||
@@ -243,7 +243,7 @@ static int find_allowdeny(request_rec *r, apr_array_header_t *a, int method)
|
|||||||
{
|
{
|
||||||
|
|
||||||
allowdeny *ap = (allowdeny *) a->elts;
|
allowdeny *ap = (allowdeny *) a->elts;
|
||||||
apr_int64_t mmask = (AP_METHOD_BIT << method);
|
ap_method_mask_t mmask = (AP_METHOD_BIT << method);
|
||||||
int i;
|
int i;
|
||||||
int gothost = 0;
|
int gothost = 0;
|
||||||
const char *remotehost = NULL;
|
const char *remotehost = NULL;
|
||||||
|
@@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
typedef struct am_conf_t {
|
typedef struct am_conf_t {
|
||||||
int allowed_set;
|
int allowed_set;
|
||||||
apr_int64_t allowed;
|
ap_method_mask_t allowed;
|
||||||
} am_conf_t;
|
} am_conf_t;
|
||||||
|
|
||||||
module AP_MODULE_DECLARE_DATA allowmethods_module;
|
module AP_MODULE_DECLARE_DATA allowmethods_module;
|
||||||
|
@@ -70,7 +70,7 @@ struct authz_section_conf {
|
|||||||
const char *provider_args;
|
const char *provider_args;
|
||||||
const void *provider_parsed_args;
|
const void *provider_parsed_args;
|
||||||
const authz_provider *provider;
|
const authz_provider *provider;
|
||||||
apr_int64_t limited;
|
ap_method_mask_t limited;
|
||||||
authz_logic_op op;
|
authz_logic_op op;
|
||||||
int negate;
|
int negate;
|
||||||
/** true if this is not a real container but produced by AuthMerging;
|
/** true if this is not a real container but produced by AuthMerging;
|
||||||
@@ -478,7 +478,7 @@ static const char *add_authz_section(cmd_parms *cmd, void *mconfig,
|
|||||||
authz_section_conf *old_section = conf->section;
|
authz_section_conf *old_section = conf->section;
|
||||||
authz_section_conf *section;
|
authz_section_conf *section;
|
||||||
int old_overrides = cmd->override;
|
int old_overrides = cmd->override;
|
||||||
apr_int64_t old_limited = cmd->limited;
|
ap_method_mask_t old_limited = cmd->limited;
|
||||||
const char *errmsg;
|
const char *errmsg;
|
||||||
|
|
||||||
if (endp == NULL) {
|
if (endp == NULL) {
|
||||||
@@ -1016,7 +1016,7 @@ static authz_status method_check_authorization(request_rec *r,
|
|||||||
const char *require_line,
|
const char *require_line,
|
||||||
const void *parsed_require_line)
|
const void *parsed_require_line)
|
||||||
{
|
{
|
||||||
const apr_int64_t *allowed = parsed_require_line;
|
const ap_method_mask_t *allowed = parsed_require_line;
|
||||||
if (*allowed & (AP_METHOD_BIT << r->method_number))
|
if (*allowed & (AP_METHOD_BIT << r->method_number))
|
||||||
return AUTHZ_GRANTED;
|
return AUTHZ_GRANTED;
|
||||||
else
|
else
|
||||||
@@ -1027,7 +1027,7 @@ static const char *method_parse_config(cmd_parms *cmd, const char *require_line,
|
|||||||
const void **parsed_require_line)
|
const void **parsed_require_line)
|
||||||
{
|
{
|
||||||
const char *w, *t;
|
const char *w, *t;
|
||||||
apr_int64_t *allowed = apr_pcalloc(cmd->pool, sizeof(apr_int64_t));
|
ap_method_mask_t *allowed = apr_pcalloc(cmd->pool, sizeof *allowed);
|
||||||
|
|
||||||
t = require_line;
|
t = require_line;
|
||||||
|
|
||||||
|
@@ -854,7 +854,7 @@ AP_DECLARE(const char *) ap_get_status_line(int status)
|
|||||||
*/
|
*/
|
||||||
static char *make_allow(request_rec *r)
|
static char *make_allow(request_rec *r)
|
||||||
{
|
{
|
||||||
apr_int64_t mask;
|
ap_method_mask_t mask;
|
||||||
apr_array_header_t *allow = apr_array_make(r->pool, 10, sizeof(char *));
|
apr_array_header_t *allow = apr_array_make(r->pool, 10, sizeof(char *));
|
||||||
apr_hash_index_t *hi = apr_hash_first(r->pool, methods_registry);
|
apr_hash_index_t *hi = apr_hash_first(r->pool, methods_registry);
|
||||||
/* For TRACE below */
|
/* For TRACE below */
|
||||||
|
@@ -857,7 +857,7 @@ AP_DECLARE(void) ap_allow_standard_methods(request_rec *r, int reset, ...)
|
|||||||
{
|
{
|
||||||
int method;
|
int method;
|
||||||
va_list methods;
|
va_list methods;
|
||||||
apr_int64_t mask;
|
ap_method_mask_t mask;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get rid of any current settings if requested; not just the
|
* Get rid of any current settings if requested; not just the
|
||||||
|
Reference in New Issue
Block a user