about summary refs log tree commit homepage
path: root/ext/clogger_ext/clogger.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/clogger_ext/clogger.c')
-rw-r--r--ext/clogger_ext/clogger.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/ext/clogger_ext/clogger.c b/ext/clogger_ext/clogger.c
index 369baf6..19386e5 100644
--- a/ext/clogger_ext/clogger.c
+++ b/ext/clogger_ext/clogger.c
@@ -185,7 +185,7 @@ static int str_case_eq(VALUE a, VALUE b)
 struct response_ops { long nr; VALUE ops; };
 
 /* this can be worse than O(M*N) :<... but C loops are fast ... */
-static VALUE swap_sent_headers(VALUE kv, VALUE memo)
+static VALUE swap_sent_headers_unsafe(VALUE kv, VALUE memo)
 {
         struct response_ops *tmp = (struct response_ops *)memo;
         VALUE key = rb_obj_as_string(RARRAY_PTR(kv)[0]);
@@ -214,6 +214,15 @@ static VALUE swap_sent_headers(VALUE kv, VALUE memo)
         return Qnil;
 }
 
+static VALUE swap_sent_headers(VALUE kv, VALUE memo)
+{
+        if (TYPE(kv) != T_ARRAY)
+                rb_raise(rb_eTypeError, "headers not returning pairs");
+        if (RARRAY_LEN(kv) < 2)
+                rb_raise(rb_eTypeError, "headers not returning pairs");
+        return swap_sent_headers_unsafe(kv, memo);
+}
+
 static VALUE sent_headers_ops(struct clogger *c)
 {
         struct response_ops tmp;