From 352a77ce682ec4cf7ffe65e07d682cf5fa11a6bc Mon Sep 17 00:00:00 2001 From: Graham Leggett Date: Sun, 26 May 2013 19:53:59 +0000 Subject: [PATCH] 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 trunk patch: http://svn.apache.org/r1476642 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@1486458 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 5 +++++ STATUS | 7 ------- modules/dav/fs/dbm.c | 4 ++++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index d24a171a02..13bbbde2e4 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,11 @@ Changes with Apache 2.4.5 + *) 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 + ] + *) mod_dav: Sending a If or If-Match header with an invalid ETag doesn't result in a 412 Precondition Failed. PR54610 [Timothy Wood ] diff --git a/STATUS b/STATUS index 07dfcd2022..11fa7b724e 100644 --- a/STATUS +++ b/STATUS @@ -90,13 +90,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * 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 - trunk patch: http://svn.apache.org/r1476642 - 2.4.x patch: trunk patch works (minus CHANGES) - +1: minfrin, jim, jorton - * 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) diff --git a/modules/dav/fs/dbm.c b/modules/dav/fs/dbm.c index 53a97e91f2..9089373991 100644 --- a/modules/dav/fs/dbm.c +++ b/modules/dav/fs/dbm.c @@ -731,6 +731,10 @@ static dav_error * dav_propdb_get_rollback(dav_db *db, static dav_error * dav_propdb_apply_rollback(dav_db *db, dav_deadprop_rollback *rollback) { + if (!rollback) { + return NULL; /* no rollback, nothing to do */ + } + if (rollback->value.dptr == NULL) { /* don't fail if the thing isn't really there. */ (void) dav_dbm_delete(db, rollback->key); -- 2.40.0