On Sat, Mar 15, 2003 at 11:36:03AM +0000, Joe Orton wrote: > Hi, the change in r1.45 of dav/main/util.c doesn't seem to work, since > weak etags look like W/"etag" not "W/etag" as the code expects. Here is > a fix:
Of course those strdups are now unnecessary since the string doesn't need to be modified... here's a better fix: --- modules/dav/main/util.c 3 Feb 2003 17:52:58 -0000 1.47 +++ modules/dav/main/util.c 15 Mar 2003 15:10:31 -0000 @@ -1073,30 +1073,20 @@ case dav_if_etag: { const char *given_etag, *current_etag; - char *new_etag; int mismatch; /* Do a weak entity comparison function as defined in * RFC 2616 13.3.3. */ - if (state_list->etag[0] == '"' && - state_list->etag[1] == 'W' && - state_list->etag[2] == '/') { - new_etag = apr_pstrdup(p, state_list->etag); - new_etag += 2; - new_etag[0] = '"'; - given_etag = new_etag; + if (state_list->etag[0] == 'W' && + state_list->etag[1] == '/') { + given_etag = state_list->etag + 2; } else { given_etag = state_list->etag; } - if (etag[0] == '"' && - etag[1] == 'W' && - etag[2] == '/') { - new_etag = apr_pstrdup(p, etag); - new_etag += 2; - new_etag[0] = '"'; - current_etag = new_etag; + if (etag[0] == 'W' && etag[1] == '/') { + current_etag = etag + 2; } else { current_etag = etag;