curb 0.7.7.1 → 0.7.8

Sign up to get free protection for your applications and to get access to all the features.
data/ext/curb.c CHANGED
@@ -255,9 +255,17 @@ void Init_curb_core() {
255
255
  /* Passed to on_debug handler to indicate that the data is protocol data sent to the peer. */
256
256
  rb_define_const(mCurl, "CURLINFO_DATA_OUT", INT2FIX(CURLINFO_DATA_OUT));
257
257
 
258
+ #ifdef HAVE_CURLFTPMETHOD_MULTICWD
258
259
  rb_define_const(mCurl, "CURL_MULTICWD", INT2FIX(CURLFTPMETHOD_MULTICWD));
260
+ #endif
261
+
262
+ #ifdef HAVE_CURLFTPMETHOD_NOCWD
259
263
  rb_define_const(mCurl, "CURL_NOCWD", INT2FIX(CURLFTPMETHOD_NOCWD));
264
+ #endif
265
+
266
+ #ifdef HAVE_CURLFTPMETHOD_SINGLECWD
260
267
  rb_define_const(mCurl, "CURL_SINGLECWD", INT2FIX(CURLFTPMETHOD_SINGLECWD));
268
+ #endif
261
269
 
262
270
  /* When passed to Curl::Easy#proxy_type , indicates that the proxy is an HTTP proxy. (libcurl >= 7.10) */
263
271
  #ifdef HAVE_CURLPROXY_HTTP
data/ext/curb.h CHANGED
@@ -20,12 +20,12 @@
20
20
  #include "curb_macros.h"
21
21
 
22
22
  // These should be managed from the Rake 'release' task.
23
- #define CURB_VERSION "0.7.7.1"
24
- #define CURB_VER_NUM 707
23
+ #define CURB_VERSION "0.7.8"
24
+ #define CURB_VER_NUM 708
25
25
  #define CURB_VER_MAJ 0
26
26
  #define CURB_VER_MIN 7
27
- #define CURB_VER_MIC 7
28
- #define CURB_VER_PATCH 1
27
+ #define CURB_VER_MIC 8
28
+ #define CURB_VER_PATCH 0
29
29
 
30
30
 
31
31
  // Maybe not yet defined in Ruby
@@ -57,7 +57,7 @@ static size_t read_data_handler(void *ptr,
57
57
  return 0;
58
58
  }
59
59
  }
60
- else {
60
+ else if (rb_respond_to(stream, rb_intern("to_s"))) {
61
61
  ruby_curl_upload *rbcu;
62
62
  VALUE str;
63
63
  size_t len;
@@ -68,6 +68,7 @@ static size_t read_data_handler(void *ptr,
68
68
  len = RSTRING_LEN(str);
69
69
  remaining = len - rbcu->offset;
70
70
  str_ptr = RSTRING_PTR(str);
71
+
71
72
  if( remaining < read_bytes ) {
72
73
  if( remaining > 0 ) {
73
74
  memcpy(ptr, str_ptr+rbcu->offset, remaining);
@@ -86,7 +87,9 @@ static size_t read_data_handler(void *ptr,
86
87
  }
87
88
  return read_bytes;
88
89
  }
89
-
90
+ else {
91
+ return 0;
92
+ }
90
93
  }
91
94
 
92
95
  static size_t proc_data_handler(char *stream,
@@ -412,7 +415,7 @@ static VALUE ruby_curl_easy_proxy_url_get(VALUE self) {
412
415
  * To remove a standard header (this is useful when removing libcurls default
413
416
  * 'Expect: 100-Continue' header when using HTTP form posts):
414
417
  *
415
- * easy.headers["Expect:"] = ''
418
+ * easy.headers["Expect"] = ''
416
419
  *
417
420
  * Anything passed to libcurl as a header will be converted to a string during
418
421
  * the perform step.
@@ -807,10 +810,14 @@ static VALUE ruby_curl_easy_put_data_set(VALUE self, VALUE data) {
807
810
  }
808
811
  }
809
812
 
813
+ // exit fast if the payload is empty
814
+ if (NIL_P(data)) { return data; }
815
+
810
816
  headers = rb_easy_get("headers");
811
817
  if( headers == Qnil ) {
812
818
  headers = rb_hash_new();
813
819
  }
820
+
814
821
  if (rb_respond_to(data, rb_intern("read"))) {
815
822
  VALUE stat = rb_funcall(data, rb_intern("stat"), 0);
816
823
  if( stat ) {
@@ -835,7 +842,7 @@ static VALUE ruby_curl_easy_put_data_set(VALUE self, VALUE data) {
835
842
  rb_raise(rb_eRuntimeError, "PUT data must respond to read or to_s");
836
843
  }
837
844
  rb_easy_set("headers",headers);
838
-
845
+
839
846
  // if we made it this far, all should be well.
840
847
  return data;
841
848
  }
@@ -2162,7 +2169,17 @@ static VALUE ruby_curl_easy_perform_delete(VALUE self) {
2162
2169
  * This method always returns true or raises an exception (defined under Curl::Err) on error.
2163
2170
  */
2164
2171
  static VALUE ruby_curl_easy_perform_verb(VALUE self, VALUE verb) {
2165
- return ruby_curl_easy_perform_verb_str(self, RSTRING_PTR(verb));
2172
+ VALUE str_verb;
2173
+ if (rb_type(verb) == T_STRING) {
2174
+ return ruby_curl_easy_perform_verb_str(self, RSTRING_PTR(verb));
2175
+ }
2176
+ else if (rb_respond_to(verb,rb_intern("to_s"))) {
2177
+ str_verb = rb_funcall(verb, rb_intern("to_s"), 0);
2178
+ return ruby_curl_easy_perform_verb_str(self, RSTRING_PTR(str_verb));
2179
+ }
2180
+ else {
2181
+ rb_raise(rb_eRuntimeError, "Invalid HTTP VERB, must response to 'to_s'");
2182
+ }
2166
2183
  }
2167
2184
 
2168
2185
  /*
@@ -2995,10 +3012,10 @@ static VALUE ruby_curl_easy_inspect(VALUE self) {
2995
3012
  /* "#<Net::HTTP http://www.google.com/:80 open=false>" */
2996
3013
  memcpy(buf,"#<Curl::Easy ", 13);
2997
3014
  memcpy(buf+13,RSTRING_PTR(url), (len - 13));
2998
- buf[len-1] = '>';
3015
+ buf[len++] = '>';
2999
3016
  return rb_str_new(buf,len);
3000
3017
  }
3001
- return rb_str_new2("#<Curl::Easy");
3018
+ return rb_str_new2("#<Curl::Easy>");
3002
3019
  }
3003
3020
 
3004
3021
 
@@ -332,6 +332,12 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
332
332
 
333
333
  ruby_curl_multi_remove( self, easy );
334
334
 
335
+ /* after running a request cleanup the headers, these are set before each request */
336
+ if (rbce->curl_headers) {
337
+ curl_slist_free_all(rbce->curl_headers);
338
+ rbce->curl_headers = NULL;
339
+ }
340
+
335
341
  if (ecode != 0) {
336
342
  raise_curl_easy_error_exception(ecode);
337
343
  }
@@ -356,6 +362,7 @@ static void rb_curl_mutli_handle_complete(VALUE self, CURL *easy_handle, int res
356
362
  (response_code >= 300 && response_code <= 999)) {
357
363
  rb_funcall( rb_easy_get("failure_proc"), idCall, 2, easy, rb_curl_easy_error(result) );
358
364
  }
365
+
359
366
  }
360
367
 
361
368
  static void rb_curl_multi_read_info(VALUE self, CURLM *multi_handle) {
@@ -235,7 +235,7 @@ static VALUE ruby_curl_postfield_new_content(int argc, VALUE *argv, VALUE klass)
235
235
  rbcpf->local_file = Qnil;
236
236
  rbcpf->remote_file = Qnil;
237
237
  rbcpf->buffer_str = Qnil;
238
-
238
+
239
239
  return Data_Wrap_Struct(cCurlPostField, curl_postfield_mark, curl_postfield_free, rbcpf);
240
240
  }
241
241
 
@@ -253,11 +253,11 @@ static VALUE ruby_curl_postfield_new_content(int argc, VALUE *argv, VALUE klass)
253
253
  * data.
254
254
  */
255
255
  static VALUE ruby_curl_postfield_new_file(int argc, VALUE *argv, VALUE klass) {
256
- // TODO needs to handle content-type too
256
+ // TODO needs to handle content-type too
257
257
  ruby_curl_postfield *rbcpf = ALLOC(ruby_curl_postfield);
258
-
258
+
259
259
  rb_scan_args(argc, argv, "21&", &rbcpf->name, &rbcpf->local_file, &rbcpf->remote_file, &rbcpf->content_proc);
260
-
260
+
261
261
  // special handling if theres a block, second arg is actually remote name.
262
262
  if (rbcpf->content_proc != Qnil) {
263
263
  if (rbcpf->local_file != Qnil) {
@@ -267,7 +267,7 @@ static VALUE ruby_curl_postfield_new_file(int argc, VALUE *argv, VALUE klass) {
267
267
  // (correct block call form)
268
268
  rbcpf->remote_file = rbcpf->local_file;
269
269
  }
270
-
270
+
271
271
  // Shouldn't get a local file, so can ignore it.
272
272
  rbcpf->local_file = Qnil;
273
273
  }
@@ -275,8 +275,8 @@ static VALUE ruby_curl_postfield_new_file(int argc, VALUE *argv, VALUE klass) {
275
275
  if (rbcpf->remote_file == Qnil) {
276
276
  rbcpf->remote_file = rbcpf->local_file;
277
277
  }
278
- }
279
-
278
+ }
279
+
280
280
  /* assoc objects */
281
281
  rbcpf->content = Qnil;
282
282
  rbcpf->content_type = Qnil;
@@ -424,55 +424,66 @@ static VALUE ruby_curl_postfield_to_str(VALUE self) {
424
424
  // FIXME This is using the deprecated curl_escape func
425
425
  ruby_curl_postfield *rbcpf;
426
426
  VALUE result = Qnil;
427
+ VALUE name = Qnil;
427
428
 
428
429
  Data_Get_Struct(self, ruby_curl_postfield, rbcpf);
429
430
 
430
- if ((rbcpf->local_file == Qnil) && (rbcpf->remote_file == Qnil)) {
431
- if (rbcpf->name != Qnil && rb_type(rbcpf->name) == T_STRING) {
431
+ if (rbcpf->name != Qnil) {
432
+ name = rbcpf->name;
433
+ if (rb_type(name) == T_STRING) {
434
+ name = rbcpf->name;
435
+ } else if (rb_respond_to(name,rb_intern("to_s"))) {
436
+ name = rb_funcall(name, rb_intern("to_s"), 0);
437
+ }
438
+ else {
439
+ name = Qnil; // we can't handle this object
440
+ }
441
+ }
442
+ if (name == Qnil) {
443
+ rb_raise(eCurlErrInvalidPostField, "Cannot convert unnamed field to string %s:%d, make sure your field name responds_to :to_s", __FILE__, __LINE__);
444
+ }
432
445
 
433
- char *tmpchrs = curl_escape(StringValuePtr(rbcpf->name), RSTRING_LEN(rbcpf->name));
446
+ char *tmpchrs = curl_escape(StringValuePtr(name), RSTRING_LEN(name));
447
+
448
+ if (!tmpchrs) {
449
+ rb_raise(eCurlErrInvalidPostField, "Failed to url-encode name `%s'", tmpchrs);
450
+ } else {
451
+ VALUE tmpcontent = Qnil;
452
+ VALUE escd_name = rb_str_new2(tmpchrs);
453
+ curl_free(tmpchrs);
434
454
 
455
+ if (rbcpf->content_proc != Qnil) {
456
+ tmpcontent = rb_funcall(rbcpf->content_proc, idCall, 1, self);
457
+ } else if (rbcpf->content != Qnil) {
458
+ tmpcontent = rbcpf->content;
459
+ } else if (rbcpf->local_file != Qnil) {
460
+ tmpcontent = rbcpf->local_file;
461
+ } else if (rbcpf->remote_file != Qnil) {
462
+ tmpcontent = rbcpf->remote_file;
463
+ } else {
464
+ tmpcontent = rb_str_new2("");
465
+ }
466
+ if (TYPE(tmpcontent) != T_STRING) {
467
+ if (rb_respond_to(tmpcontent, rb_intern("to_s"))) {
468
+ tmpcontent = rb_funcall(tmpcontent, rb_intern("to_s"), 0);
469
+ }
470
+ else {
471
+ rb_raise(rb_eRuntimeError, "postfield(%s) is not a string and does not respond_to to_s", RSTRING_PTR(escd_name) );
472
+ }
473
+ }
474
+ //fprintf(stderr, "encoding content: %ld - %s\n", RSTRING_LEN(tmpcontent), RSTRING_PTR(tmpcontent) );
475
+ tmpchrs = curl_escape(RSTRING_PTR(tmpcontent), RSTRING_LEN(tmpcontent));
435
476
  if (!tmpchrs) {
436
- rb_raise(eCurlErrInvalidPostField, "Failed to url-encode name `%s'", tmpchrs);
477
+ rb_raise(eCurlErrInvalidPostField, "Failed to url-encode content `%s'", tmpchrs);
437
478
  } else {
438
- VALUE tmpcontent = Qnil;
439
- VALUE escd_name = rb_str_new2(tmpchrs);
479
+ VALUE escd_content = rb_str_new2(tmpchrs);
440
480
  curl_free(tmpchrs);
441
481
 
442
- if (rbcpf->content_proc != Qnil) {
443
- tmpcontent = rb_funcall(rbcpf->content_proc, idCall, 1, self);
444
- } else if (rbcpf->content != Qnil) {
445
- tmpcontent = rbcpf->content;
446
- } else {
447
- tmpcontent = rb_str_new2("");
448
- }
449
- if (TYPE(tmpcontent) != T_STRING) {
450
- if (rb_respond_to(tmpcontent, rb_intern("to_s"))) {
451
- tmpcontent = rb_funcall(tmpcontent, rb_intern("to_s"), 0);
452
- }
453
- else {
454
- rb_raise(rb_eRuntimeError, "postfield(%s) is not a string and does not respond_to to_s", RSTRING_PTR(escd_name) );
455
- }
456
- }
457
- //fprintf(stderr, "encoding content: %ld - %s\n", RSTRING_LEN(tmpcontent), RSTRING_PTR(tmpcontent) );
458
- tmpchrs = curl_escape(RSTRING_PTR(tmpcontent), RSTRING_LEN(tmpcontent));
459
- if (!tmpchrs) {
460
- rb_raise(eCurlErrInvalidPostField, "Failed to url-encode content `%s'", tmpchrs);
461
- } else {
462
- VALUE escd_content = rb_str_new2(tmpchrs);
463
- curl_free(tmpchrs);
464
-
465
- result = escd_name;
466
- rb_str_cat(result, "=", 1);
467
- rb_str_concat(result, escd_content);
468
- }
482
+ result = escd_name;
483
+ rb_str_cat(result, "=", 1);
484
+ rb_str_concat(result, escd_content);
469
485
  }
470
- } else {
471
- rb_raise(eCurlErrInvalidPostField, "Cannot convert unnamed field to string %s:%d", __FILE__, __LINE__);
472
486
  }
473
- } else {
474
- rb_raise(eCurlErrInvalidPostField, "Local file and remote file are both nil %s:%d", __FILE__, __LINE__);
475
- }
476
487
 
477
488
  return result;
478
489
  }
@@ -11,7 +11,7 @@ VALUE cCurlUpload;
11
11
  #endif
12
12
 
13
13
  static void curl_upload_mark(ruby_curl_upload *rbcu) {
14
- if (rbcu->stream) rb_gc_mark(rbcu->stream);
14
+ if (rbcu->stream && !NIL_P(rbcu->stream)) rb_gc_mark(rbcu->stream);
15
15
  }
16
16
  static void curl_upload_free(ruby_curl_upload *rbcu) {
17
17
  free(rbcu);
@@ -119,6 +119,11 @@ have_constant "curlinfo_primary_ip"
119
119
  # ie quirk added in 7.19.3
120
120
  have_constant "curlauth_digest_ie"
121
121
 
122
+ # added in 7.15.1
123
+ have_constant "curlftpmethod_multicwd"
124
+ have_constant "curlftpmethod_nocwd"
125
+ have_constant "curlftpmethod_singlecwd"
126
+
122
127
  # centos 4.5 build of libcurl
123
128
  have_constant "curlm_bad_socket"
124
129
  have_constant "curlm_unknown_option"
@@ -102,6 +102,10 @@ class TestServlet < WEBrick::HTTPServlet::AbstractServlet
102
102
  respond_with(:PURGE,req,res)
103
103
  end
104
104
 
105
+ def do_COPY(req,res)
106
+ respond_with(:COPY,req,res)
107
+ end
108
+
105
109
  end
106
110
 
107
111
  module TestServerMethods
@@ -1,4 +1,7 @@
1
1
  require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
2
+ class FooNoToS
3
+ undef to_s
4
+ end
2
5
 
3
6
  class TestCurbCurlEasy < Test::Unit::TestCase
4
7
  def test_class_perform_01
@@ -360,6 +363,25 @@ class TestCurbCurlEasy < Test::Unit::TestCase
360
363
  assert_equal blk, c.on_body # sets handler nil, returns old handler
361
364
  assert_equal nil, c.on_body
362
365
  end
366
+
367
+ def test_inspect_with_no_url
368
+ c = Curl::Easy.new
369
+ assert_equal '#<Curl::Easy>', c.inspect
370
+ end
371
+
372
+ def test_inspect_with_short_url
373
+ c = Curl::Easy.new('http://www.google.com/')
374
+ assert_equal "#<Curl::Easy http://www.google.com/>", c.inspect
375
+ end
376
+
377
+ def test_inspect_truncates_to_64_chars
378
+ base_url = 'http://www.google.com/'
379
+ truncated_url = base_url + 'x' * (64 - '#<Curl::Easy >'.size - base_url.size)
380
+ long_url = truncated_url + 'yyyy'
381
+ c = Curl::Easy.new(long_url)
382
+ assert_equal 64, c.inspect.size
383
+ assert_equal "#<Curl::Easy #{truncated_url}>", c.inspect
384
+ end
363
385
 
364
386
  def test_on_header
365
387
  blk = lambda { |i| i.length }
@@ -547,6 +569,15 @@ class TestCurbCurlEasy < Test::Unit::TestCase
547
569
  assert_equal 'foo=bar&encoded%20string=val', curl.post_body
548
570
  end
549
571
 
572
+ def test_post_multipart_file_remote
573
+ curl = Curl::Easy.new(TestServlet.url)
574
+ curl.multipart_form_post = true
575
+ pf = Curl::PostField.file('readme', File.expand_path(File.join(File.dirname(__FILE__),'..','README')))
576
+ curl.http_post(pf)
577
+ assert_match /HTTP POST file upload/, curl.body_str
578
+ assert_match /Content-Disposition: form-data/, curl.body_str
579
+ end
580
+
550
581
  def test_delete_remote
551
582
  curl = Curl::Easy.new(TestServlet.url)
552
583
  curl.http_delete
@@ -602,6 +633,13 @@ class TestCurbCurlEasy < Test::Unit::TestCase
602
633
  assert_match /message$/, curl.body_str
603
634
  end
604
635
 
636
+ def test_put_nil_data_no_crash
637
+ curl = Curl::Easy.new(TestServlet.url)
638
+ curl.put_data = nil
639
+
640
+ curl.perform
641
+ end
642
+
605
643
  def test_put_remote_file
606
644
  curl = Curl::Easy.new(TestServlet.url)
607
645
  File.open(__FILE__,'r') do|f|
@@ -755,6 +793,20 @@ class TestCurbCurlEasy < Test::Unit::TestCase
755
793
  assert_equal 'PURGE', curl.body_str
756
794
  curl.http_put('hello')
757
795
  assert_equal "PUT\nhello", curl.body_str
796
+ curl.http('COPY')
797
+ assert_equal 'COPY', curl.body_str
798
+ end
799
+
800
+ def test_easy_http_verbs_must_respond_to_str
801
+ # issue http://github.com/taf2/curb/issues#issue/45
802
+ assert_nothing_raised do
803
+ c = Curl::Easy.new ; c.url = 'http://example.com' ; c.http(:get)
804
+ end
805
+
806
+ assert_raise RuntimeError do
807
+ c = Curl::Easy.new ; c.url = 'http://example.com' ; c.http(FooNoToS.new)
808
+ end
809
+
758
810
  end
759
811
 
760
812
  # http://github.com/taf2/curb/issues/#issue/33
@@ -70,7 +70,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase
70
70
 
71
71
  m.perform
72
72
 
73
- assert n, responses.size
73
+ assert_equal n, responses.size
74
74
  n.times do|i|
75
75
  assert_match(/^# DO NOT REMOVE THIS COMMENT/, responses[i], "response #{i}")
76
76
  end
@@ -93,7 +93,7 @@ class TestCurbCurlMulti < Test::Unit::TestCase
93
93
  end
94
94
  m.perform
95
95
 
96
- assert n, responses.size
96
+ assert_equal n, responses.size
97
97
  n.times do|i|
98
98
  assert_match(/^# DO NOT REMOVE THIS COMMENT/, responses[i], "response #{i}")
99
99
  end
@@ -62,6 +62,7 @@ class TestCurbCurlPostfield < Test::Unit::TestCase
62
62
  assert_equal 'foo', pf.name
63
63
  assert_equal 'localname', pf.local_file
64
64
  assert_equal 'localname', pf.remote_file
65
+ assert_nothing_raised { pf.to_s }
65
66
  assert_nil pf.content_type
66
67
  assert_nil pf.content
67
68
  assert_nil pf.set_content_proc
@@ -136,6 +137,7 @@ class TestCurbCurlPostfield < Test::Unit::TestCase
136
137
 
137
138
  def test_to_s_04
138
139
  pf = Curl::PostField.file('foo.file', 'bar.file')
139
- assert_raise(Curl::Err::InvalidPostFieldError) { pf.to_s }
140
+ assert_nothing_raised { pf.to_s }
141
+ #assert_raise(Curl::Err::InvalidPostFieldError) { pf.to_s }
140
142
  end
141
143
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 105
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 7
10
- - 1
11
- version: 0.7.7.1
9
+ - 8
10
+ version: 0.7.8
12
11
  platform: ruby
13
12
  authors:
14
13
  - Ross Bamford
@@ -17,7 +16,7 @@ autorequire:
17
16
  bindir: bin
18
17
  cert_chain: []
19
18
 
20
- date: 2010-06-22 00:00:00 -04:00
19
+ date: 2010-08-17 00:00:00 -04:00
21
20
  default_executable:
22
21
  dependencies: []
23
22
 
@@ -36,38 +35,38 @@ files:
36
35
  - Rakefile
37
36
  - doc.rb
38
37
  - ext/extconf.rb
39
- - lib/curl.rb
40
38
  - lib/curb.rb
39
+ - lib/curl.rb
41
40
  - ext/curb.c
42
- - ext/curb_upload.c
43
- - ext/curb_postfield.c
44
41
  - ext/curb_easy.c
45
- - ext/curb_multi.c
46
42
  - ext/curb_errors.c
47
- - ext/curb_errors.h
48
- - ext/curb_multi.h
43
+ - ext/curb_multi.c
44
+ - ext/curb_postfield.c
45
+ - ext/curb_upload.c
49
46
  - ext/curb.h
50
47
  - ext/curb_easy.h
48
+ - ext/curb_errors.h
49
+ - ext/curb_macros.h
50
+ - ext/curb_multi.h
51
51
  - ext/curb_postfield.h
52
52
  - ext/curb_upload.h
53
- - ext/curb_macros.h
54
- - tests/bugtests.rb
55
- - tests/mem_check.rb
56
- - tests/bug_require_last_or_segfault.rb
57
- - tests/helper.rb
58
- - tests/tc_curl_postfield.rb
53
+ - tests/alltests.rb
54
+ - tests/bug_curb_easy_blocks_ruby_threads.rb
55
+ - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
59
56
  - tests/bug_instance_post_differs_from_class_post.rb
60
57
  - tests/bug_multi_segfault.rb
61
- - tests/alltests.rb
62
58
  - tests/bug_postfields_crash.rb
63
- - tests/require_last_or_segfault_script.rb
64
59
  - tests/bug_postfields_crash2.rb
65
- - tests/unittests.rb
66
- - tests/tc_curl_multi.rb
67
- - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
60
+ - tests/bug_require_last_or_segfault.rb
61
+ - tests/bugtests.rb
62
+ - tests/helper.rb
63
+ - tests/mem_check.rb
64
+ - tests/require_last_or_segfault_script.rb
68
65
  - tests/tc_curl_download.rb
69
66
  - tests/tc_curl_easy.rb
70
- - tests/bug_curb_easy_blocks_ruby_threads.rb
67
+ - tests/tc_curl_multi.rb
68
+ - tests/tc_curl_postfield.rb
69
+ - tests/unittests.rb
71
70
  has_rdoc: true
72
71
  homepage: http://curb.rubyforge.org/
73
72
  licenses: []
@@ -105,20 +104,20 @@ signing_key:
105
104
  specification_version: 3
106
105
  summary: Ruby libcurl bindings
107
106
  test_files:
108
- - tests/bugtests.rb
109
- - tests/mem_check.rb
110
- - tests/bug_require_last_or_segfault.rb
111
- - tests/helper.rb
112
- - tests/tc_curl_postfield.rb
107
+ - tests/alltests.rb
108
+ - tests/bug_curb_easy_blocks_ruby_threads.rb
109
+ - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
113
110
  - tests/bug_instance_post_differs_from_class_post.rb
114
111
  - tests/bug_multi_segfault.rb
115
- - tests/alltests.rb
116
112
  - tests/bug_postfields_crash.rb
117
- - tests/require_last_or_segfault_script.rb
118
113
  - tests/bug_postfields_crash2.rb
119
- - tests/unittests.rb
120
- - tests/tc_curl_multi.rb
121
- - tests/bug_curb_easy_post_with_string_no_content_length_header.rb
114
+ - tests/bug_require_last_or_segfault.rb
115
+ - tests/bugtests.rb
116
+ - tests/helper.rb
117
+ - tests/mem_check.rb
118
+ - tests/require_last_or_segfault_script.rb
122
119
  - tests/tc_curl_download.rb
123
120
  - tests/tc_curl_easy.rb
124
- - tests/bug_curb_easy_blocks_ruby_threads.rb
121
+ - tests/tc_curl_multi.rb
122
+ - tests/tc_curl_postfield.rb
123
+ - tests/unittests.rb