From: Graham Leggett Date: Sun, 26 May 2013 19:58:20 +0000 (+0000) Subject: mod_dav: Do not fail PROPPATCH when prop namespace is not known. PR 52559 X-Git-Tag: 2.4.5~219 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d279048503e8634e188d6735fedcda9e9cbd2010;p=apache mod_dav: Do not fail PROPPATCH when prop namespace is not known. PR 52559 trunk patch: http://svn.apache.org/r1476644 Submitted by: Diego Santa Cruz Reviewed by: minfrin, jim, jorton git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1486459 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 13bbbde2e4..0d2d1c0470 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,9 @@ Changes with Apache 2.4.5 + *) mod_dav: Do not fail PROPPATCH when prop namespace is not known. + PR 52559 [Diego Santa Cruz ] + *) mod_dav: When a PROPPATCH attempts to remove a non-existent dead property on a resource for which there is no dead property in the same namespace httpd segfaults. PR 52559 [Diego Santa Cruz diff --git a/STATUS b/STATUS index 11fa7b724e..af4e6eb8be 100644 --- a/STATUS +++ b/STATUS @@ -90,11 +90,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_dav: Do not fail PROPPATCH when prop namespace is not known. PR 52559 - trunk patch: http://svn.apache.org/r1476644 - 2.4.x patch: trunk patch works (minus CHANGES) - +1: minfrin, jim, jorton - * mod_dav: Sending a MERGE request against a URI handled by mod_dav_svn with the source href (sent as part of the request body as XML) pointing to a URI that is not configured for DAV will trigger a segfault. diff --git a/modules/dav/fs/dbm.c b/modules/dav/fs/dbm.c index 9089373991..821168e887 100644 --- a/modules/dav/fs/dbm.c +++ b/modules/dav/fs/dbm.c @@ -191,7 +191,15 @@ void dav_dbm_close(dav_db *db) dav_error * dav_dbm_fetch(dav_db *db, apr_datum_t key, apr_datum_t *pvalue) { - apr_status_t status = apr_dbm_fetch(db->file, key, pvalue); + apr_status_t status; + + if (!key.dptr) { + /* no key could be created (namespace not known) => no value */ + memset(pvalue, 0, sizeof(*pvalue)); + status = APR_SUCCESS; + } else { + status = apr_dbm_fetch(db->file, key, pvalue); + } return dav_fs_dbm_error(db, NULL, status); }