You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Joe Orton <jo...@manyfish.co.uk> on 2003/03/15 12:36:03 UTC
[PATCH] fix mod_dav If: weak etag comparison
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:
Index: modules/dav/main/util.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/dav/main/util.c,v
retrieving revision 1.47
diff -u -r1.47 util.c
--- modules/dav/main/util.c 3 Feb 2003 17:52:58 -0000 1.47
+++ modules/dav/main/util.c 15 Mar 2003 11:29:04 -0000
@@ -1079,24 +1079,15 @@
/* 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 = apr_pstrdup(p, 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 = apr_pstrdup(p, etag + 2);
}
else {
current_etag = etag;
Re: [PATCH] fix mod_dav If: weak etag comparison
Posted by Joe Orton <jo...@manyfish.co.uk>.
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;
[PATCH] Resend: fix mod_dav If: weak etag comparison
Posted by Joe Orton <jo...@redhat.com>.
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;