Browse Source

Merge pull request #343 from hcp24/master

change mg_get_cookie to ignore substrings
bel2125 9 years ago
parent
commit
872448c9d3
1 changed files with 49 additions and 44 deletions
  1. 49 44
      src/civetweb.c

+ 49 - 44
src/civetweb.c

@@ -4845,50 +4845,55 @@ mg_get_var2(const char *data,
 }
 }
 
 
 
 
-int
-mg_get_cookie(const char *cookie_header,
-              const char *var_name,
-              char *dst,
-              size_t dst_size)
-{
-	const char *s, *p, *end;
-	int name_len, len = -1;
-
-	if (dst == NULL || dst_size == 0) {
-		len = -2;
-	} else if (var_name == NULL || (s = cookie_header) == NULL) {
-		len = -1;
-		dst[0] = '\0';
-	} else {
-		name_len = (int)strlen(var_name);
-		end = s + strlen(s);
-		dst[0] = '\0';
-
-		for (; (s = mg_strcasestr(s, var_name)) != NULL; s += name_len) {
-			if (s[name_len] == '=') {
-				s += name_len + 1;
-				if ((p = strchr(s, ' ')) == NULL) {
-					p = end;
-				}
-				if (p[-1] == ';') {
-					p--;
-				}
-				if (*s == '"' && p[-1] == '"' && p > s + 1) {
-					s++;
-					p--;
-				}
-				if ((size_t)(p - s) < dst_size) {
-					len = (int)(p - s);
-					mg_strlcpy(dst, s, (size_t)len + 1);
-				} else {
-					len = -3;
-				}
-				break;
-			}
-		}
-	}
-	return len;
-}
+/* HCP24: some changes to compare hole var_name */
+int
+mg_get_cookie(const char *cookie_header,
+  const char *var_name,
+  char *dst,
+  size_t dst_size)
+{
+  const char *s, *p, *end;
+  int name_len, len = -1;
+  
+  if (dst == NULL || dst_size == 0) {
+    return -2;
+  }
+
+  dst[0] = '\0';
+  if (var_name == NULL || (s = cookie_header) == NULL) {
+    return -1;
+  }
+
+  name_len = (int)strlen(var_name);
+  end = s + strlen(s); 
+  for (; (s = mg_strcasestr( s, var_name)) != NULL; s += name_len) {
+    if (s[name_len] == '=') {
+      /* HCP24: now check is it a substring or a full cookie name */
+      if ((s == cookie_header) || (s[-1] == ' ')) {
+        s += name_len + 1;
+        if ((p = strchr(s, ' ')) == NULL) {
+          p = end;
+        }
+        if (p[-1] == ';') {
+          p--;
+        }
+        if (*s == '"' && p[-1] == '"' && p > s + 1) {
+          s++;
+          p--;
+        }
+        if ((size_t)(p - s) < dst_size) {
+          len = (int)(p - s);
+          mg_strlcpy(dst, s, (size_t)len + 1);
+        }
+        else {
+          len = -3;
+        }
+        break;
+      }
+    }
+  }
+  return len;
+}
 
 
 
 
 #if defined(USE_WEBSOCKET) || defined(USE_LUA)
 #if defined(USE_WEBSOCKET) || defined(USE_LUA)