diff options
author | Graham Leggett <minfrin@apache.org> | 2004-10-13 16:51:38 +0000 |
---|---|---|
committer | Graham Leggett <minfrin@apache.org> | 2004-10-13 16:51:38 +0000 |
commit | 557dde5d156e996428a96c5f36868371f65581d3 (patch) | |
tree | 8255b1b93621222b71988f41ad6b9898932fd7e0 | |
parent | aef230205e8f87a1e95c93bc8010377309510099 (diff) | |
download | httpd-557dde5d156e996428a96c5f36868371f65581d3.tar.gz |
mod_rewrite: Fix 0 bytes write into random memory position.
PR: 31036
Obtained from:
Submitted by: nd
Reviewed by: nd, trawick, jerenkrantz, jim
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/APACHE_2_0_BRANCH@105431 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | CHANGES | 3 | ||||
-rw-r--r-- | STATUS | 3 | ||||
-rw-r--r-- | modules/mappers/mod_rewrite.c | 30 |
3 files changed, 19 insertions, 17 deletions
@@ -1,5 +1,8 @@ Changes with Apache 2.0.53 + *) mod_rewrite: Fix 0 bytes write into random memory position. + PR 31036. [André Malo] + *) mod_disk_cache: Do not store aborted content. PR 21492. [Rüiger Plü <r.pluem t-online.de>] @@ -1,5 +1,5 @@ APACHE 2.0 STATUS: -*-text-*- -Last modified at [$Date: 2004/10/13 16:40:54 $] +Last modified at [$Date: 2004/10/13 16:51:37 $] Release: @@ -129,7 +129,6 @@ PATCHES TO BACKPORT FROM 2.1 *) mod_rewrite: Fix 0 bytes write into random memory position. PR 31036. (2.0 + 1.3) http://www.apache.org/~nd/dbmmap_1.3.patch - http://www.apache.org/~nd/dbmmap_2.0.patch +1: nd, trawick, jerenkrantz, jim *) mod_rewrite:Fix query string handling for proxied URLs. PR 14518. diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c index 290483710a..23770b48fb 100644 --- a/modules/mappers/mod_rewrite.c +++ b/modules/mappers/mod_rewrite.c @@ -3200,25 +3200,25 @@ static char *lookup_map_dbmfile(request_rec *r, const char *file, apr_dbm_t *dbmfp = NULL; apr_datum_t dbmkey; apr_datum_t dbmval; - char *value = NULL; - char buf[MAX_STRING_LEN]; - apr_status_t rv; + char *value; + + if (apr_dbm_open_ex(&dbmfp, dbmtype, file, APR_DBM_READONLY, APR_OS_DEFAULT, + r->pool) != APR_SUCCESS) { + return NULL; + } dbmkey.dptr = key; dbmkey.dsize = strlen(key); - if ((rv = apr_dbm_open_ex(&dbmfp, dbmtype, file, APR_DBM_READONLY, - 0 /* irrelevant when reading */, - r->pool)) == APR_SUCCESS) { - rv = apr_dbm_fetch(dbmfp, dbmkey, &dbmval); - if (rv == APR_SUCCESS && dbmval.dptr) { - memcpy(buf, dbmval.dptr, - dbmval.dsize < sizeof(buf)-1 ? - dbmval.dsize : sizeof(buf)-1 ); - buf[dbmval.dsize] = '\0'; - value = apr_pstrdup(r->pool, buf); - } - apr_dbm_close(dbmfp); + + if (apr_dbm_fetch(dbmfp, dbmkey, &dbmval) == APR_SUCCESS && dbmval.dptr) { + value = apr_pstrmemdup(r->pool, dbmval.dptr, dbmval.dsize); + } + else { + value = NULL; } + + apr_dbm_close(dbmfp); + return value; } |