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
-*- coding: utf-8 -*-
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
OCSP requests. PR 64135. [Ruediger Pluem]
* 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.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" */
#ifndef MODULE_MAGIC_NUMBER_MAJOR
-#define MODULE_MAGIC_NUMBER_MAJOR 20190312
+#define MODULE_MAGIC_NUMBER_MAJOR 20200217
#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
/** Table of directives allowed per AllowOverrideList */
apr_table_t *override_list;
/** Which methods are <Limit>ed */
- apr_int64_t limited;
+ ap_method_mask_t limited;
/** methods which are limited */
apr_array_header_t *limited_xmethods;
/** methods which are xlimited */
*/
#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.
*/
-#define AP_METHOD_BIT ((apr_int64_t)1)
+#define AP_METHOD_BIT ((ap_method_mask_t)1)
/** @} */
*/
struct ap_method_list_t {
/** The bitmask used for known methods */
- apr_int64_t method_mask;
+ ap_method_mask_t method_mask;
/** the array used for extension methods */
apr_array_header_t *method_list;
};
* HTTP_METHOD_NOT_ALLOWED. Unfortunately this means that a Script GET
* handler can't be installed by mod_actions.
*/
- apr_int64_t allowed;
+ ap_method_mask_t allowed;
/** Array of extension methods */
apr_array_header_t *allowed_xmethods;
/** List of allowed methods */
};
typedef struct {
- apr_int64_t limited;
+ ap_method_mask_t limited;
union {
char *from;
apr_ipsubnet_t *ip;
{
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 gothost = 0;
const char *remotehost = NULL;
typedef struct am_conf_t {
int allowed_set;
- apr_int64_t allowed;
+ ap_method_mask_t allowed;
} am_conf_t;
module AP_MODULE_DECLARE_DATA allowmethods_module;
const char *provider_args;
const void *provider_parsed_args;
const authz_provider *provider;
- apr_int64_t limited;
+ ap_method_mask_t limited;
authz_logic_op op;
int negate;
/** true if this is not a real container but produced by AuthMerging;
authz_section_conf *old_section = conf->section;
authz_section_conf *section;
int old_overrides = cmd->override;
- apr_int64_t old_limited = cmd->limited;
+ ap_method_mask_t old_limited = cmd->limited;
const char *errmsg;
if (endp == NULL) {
const char *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))
return AUTHZ_GRANTED;
else
const void **parsed_require_line)
{
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;
*/
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_hash_index_t *hi = apr_hash_first(r->pool, methods_registry);
/* For TRACE below */
{
int method;
va_list methods;
- apr_int64_t mask;
+ ap_method_mask_t mask;
/*
* Get rid of any current settings if requested; not just the