return urip - uri;
}
+static char magic_error_value;
+#define PREGSUB_ERROR (&magic_error_value)
+
static char *try_alias_list(request_rec *r, apr_array_header_t *aliases,
int is_redir, int *status)
{
pathlen));
}
}
+ else {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+ "Regex substitution in '%s' failed. "
+ "Replacement too long?", alias->real);
+ return PREGSUB_ERROR;
+ }
}
else {
/* need something non-null */
}
if ((ret = try_alias_list(r, serverconf->redirects, 1, &status)) != NULL) {
+ if (ret == PREGSUB_ERROR)
+ return HTTP_INTERNAL_SERVER_ERROR;
if (ap_is_HTTP_REDIRECT(status)) {
if (ret[0] == '/') {
char *orig_target = ret;
/* It may have changed since last time, so try again */
if ((ret = try_alias_list(r, dirconf->redirects, 1, &status)) != NULL) {
+ if (ret == PREGSUB_ERROR)
+ return HTTP_INTERNAL_SERVER_ERROR;
if (ap_is_HTTP_REDIRECT(status)) {
if (ret[0] == '/') {
char *orig_target = ret;
}
found = ap_pregsub(r->pool, real, use_uri, AP_MAX_REG_MATCH,
(use_uri == r->uri) ? regm : reg1);
+ if (!found) {
+ ap_log_rerror(APLOG_MARK, APLOG_CRIT, 0, r,
+ "Substitution in regular expression failed. "
+ "Replacement too long?");
+ return HTTP_INTERNAL_SERVER_ERROR;
+ }
+
/* Note: The strcmp() below catches cases where there
* was no regex substitution. This is so cases like:
*
*
* which may be confusing.
*/
- if (found && strcmp(found, real)) {
+ if (strcmp(found, real) != 0) {
found = apr_pstrcat(r->pool, "proxy:", found, NULL);
}
else {