+## v5.3.1 (2023-12-13)
+
+- cohttp: case-insensitive check of set-cookies (chomosuke, #1008)
+
## v5.3.0 (2023-07-21)
- cohttp-async: support for base/async v0.16
-version: "5.3.0"
+version: "5.3.1"
opam-version: "2.0"
maintainer: "anil@recoil.org"
authors: [
-version: "5.3.0"
+version: "5.3.1"
opam-version: "2.0"
maintainer: "anil@recoil.org"
authors: [
-version: "5.3.0"
+version: "5.3.1"
opam-version: "2.0"
maintainer: "anil@recoil.org"
authors: [
-version: "5.3.0"
+version: "5.3.1"
opam-version: "2.0"
maintainer: "anil@recoil.org"
authors: [
-version: "5.3.0"
+version: "5.3.1"
opam-version: "2.0"
maintainer: "anil@recoil.org"
authors: ["Anil Madhavapeddy" "Thomas Gazagnaire"]
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * cohttp v5.3.0
+ * cohttp v5.0.0-25-g0bb4e19
*)
open Lwt.Infix
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * cohttp v5.3.0
+ * cohttp v5.0.0-25-g0bb4e19
*)
open Lwt.Infix
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * cohttp v5.3.0
+ * cohttp v5.0.0-25-g0bb4e19
*)
(** Cohttp IO implementation using Mirage channels. *)
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * cohttp v5.3.0
+ * cohttp v5.0.0-25-g0bb4e19
*)
module Key = Mirage_kv.Key
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * cohttp v5.3.0
+ * cohttp v5.0.0-25-g0bb4e19
*)
(** Serve static HTTP sites from a Mirage key-value store. *)
-version: "5.3.0"
+version: "5.3.1"
opam-version: "2.0"
maintainer: "anil@recoil.org"
authors: [
-version: "5.3.0"
+version: "5.3.1"
opam-version: "2.0"
maintainer: "anil@recoil.org"
authors: [
:: alist
with Failure _ -> alist
+ let caseless_equal a b =
+ if a == b then true
+ else
+ let len = String.length a in
+ len = String.length b
+ &&
+ let stop = ref false in
+ let idx = ref 0 in
+ while (not !stop) && !idx < len do
+ let c1 = String.unsafe_get a !idx in
+ let c2 = String.unsafe_get b !idx in
+ if Char.lowercase_ascii c1 <> Char.lowercase_ascii c2 then stop := true;
+ incr idx
+ done;
+ not !stop
+
(* TODO: check dupes+order *)
let extract hdr =
Header.fold
- (function
- | "set-cookie" -> extract_1_0
- | "set-cookie2" -> extract_1_1
- | _ -> fun _ a -> a)
+ (fun k c a ->
+ if caseless_equal k "set-cookie" then extract_1_0 c a
+ else if caseless_equal k "set-cookie2" then extract_1_1 c a
+ else a)
hdr []
let value { cookie = _, v; _ } = v
(lang dune 2.0)
(name cohttp)
-(version v5.3.0)
+(version v5.0.0-25-g0bb4e19)