[Aversa-commits] aversa/ext BEncoding.c test_BEncoding.rb

teamikl at rubyforge.org teamikl at rubyforge.org
Mon Sep 27 23:30:55 EDT 2004


Update of /var/cvs/aversa/aversa/ext
In directory rubyforge.org:/tmp/cvs-serv30827

Modified Files:
	BEncoding.c test_BEncoding.rb 
Log Message:
Added comment found another problem. and Tested with ruby-1.9 (in cvs)


Index: BEncoding.c
===================================================================
RCS file: /var/cvs/aversa/aversa/ext/BEncoding.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** BEncoding.c	21 Sep 2004 23:59:14 -0000	1.11
--- BEncoding.c	28 Sep 2004 03:30:53 -0000	1.12
***************
*** 101,106 ****
  	switch (TYPE(obj)) {
  	case T_HASH:
! 		tmp = rb_funcall(obj, id_to_a, 0, 0); rb_gc_mark(tmp);
! 		ary = rb_funcall(tmp, id_sort, 0, 0); rb_gc_mark(ary);
  	
  		for (i = 0; i < RARRAY(ary)->len; ++i)
--- 101,105 ----
  	switch (TYPE(obj)) {
  	case T_HASH:
! 		ary = rb_funcall(obj, id_to_a, 0, 0); rb_gc_mark(ary);
  	
  		for (i = 0; i < RARRAY(ary)->len; ++i)
***************
*** 137,141 ****
  		
  	default:
! 		rb_raise(rb_eTypeError, "No support type");
  		break;
  	}
--- 136,147 ----
  		
  	default:
!         /**
!          * XXX Segmentation fault in ruby1.9(cvs) 
!          * when I gave an object which in non-supprt type.
!          * It's problem even ruby1.8.
!          *
!          * How I can rescue it in C function.
!          */
!         rb_raise(rb_eTypeError, "No Support type");
  		break;
  	}
***************
*** 233,246 ****
  {
  	VALUE retObj = Qnil;
! 	unsigned long buffer_size = 0;
      char *stream = NULL;
      
      buffer_size = bencoding_encode_len(obj, 0);
! 	stream = (char *)xmalloc(buffer_size+1);
      memset(stream, 0, buffer_size+1);
      
! 	(void)bencoding_encode_iterator(stream, obj);
      
! 	retObj = rb_str_new((char *)NULL, buffer_size); 
      RSTRING(retObj)->ptr = stream;
  
--- 239,254 ----
  {
  	VALUE retObj = Qnil;
!     unsigned long buffer_size = 0;
      char *stream = NULL;
      
+     /* How to catch the exception which bencoding_encode_len may raise */
      buffer_size = bencoding_encode_len(obj, 0);
! 
!     stream = (char *)xmalloc(buffer_size+1);
      memset(stream, 0, buffer_size+1);
      
!     (void)bencoding_encode_iterator(stream, obj);
      
!     retObj = rb_str_new((char *)NULL, buffer_size); 
      RSTRING(retObj)->ptr = stream;
  
***************
*** 257,273 ****
  {
  	VALUE stream = Qnil;
-    
  
  	rb_raise(rb_eNotImpError, "Not much motivation for this method :p");	
  	
- 	
- 	rb_scan_args(argc, argv, "1", &stream);
- 	rb_gc_mark(stream);
- 
  	if (argc != 1) {
  		rb_raise(rb_eArgError,
  				 "Wrong numbers of arguments (%d for 1)", argc);
  	}
! 	
  
  	/* Accept any stream object which has 'getc' and 'read' methods */
--- 265,279 ----
  {
  	VALUE stream = Qnil;
  
  	rb_raise(rb_eNotImpError, "Not much motivation for this method :p");	
  	
  	if (argc != 1) {
  		rb_raise(rb_eArgError,
  				 "Wrong numbers of arguments (%d for 1)", argc);
  	}
!     
! 	rb_scan_args(argc, argv, "1", &stream);
! 	rb_gc_mark(stream);
!     
  
  	/* Accept any stream object which has 'getc' and 'read' methods */
***************
*** 290,294 ****
  	VALUE rb_mBEncoding = rb_define_module("BEncoding");
  	rb_define_module_function(rb_mBEncoding, "encode", bencoding_encode, 1);
! 	// rb_define_module_function(rb_mBEncoding, "decode", bencoding_decode, -1);
  
  	id_to_s = rb_intern("to_s");
--- 296,300 ----
  	VALUE rb_mBEncoding = rb_define_module("BEncoding");
  	rb_define_module_function(rb_mBEncoding, "encode", bencoding_encode, 1);
! 	// rb_define_module_function(rb_mBEncoding, "decode", bencoding_decode, 1);
  
  	id_to_s = rb_intern("to_s");

Index: test_BEncoding.rb
===================================================================
RCS file: /var/cvs/aversa/aversa/ext/test_BEncoding.rb,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** test_BEncoding.rb	21 Sep 2004 23:59:14 -0000	1.6
--- test_BEncoding.rb	28 Sep 2004 03:30:53 -0000	1.7
***************
*** 16,24 ****
  
    def test_integer
!     assert_equal(0.bencode, 'i0e')
!     assert_equal(1.bencode, 'i1e')
!     assert_equal(10000.bencode, 'i10000e')
!     assert_equal(-1000.bencode, 'i-1000e')
!     assert_equal(9876543210.bencode, 'i9876543210e')
  
      assert_raise(NoMethodError) { (1.2).bencode }
--- 16,24 ----
  
    def test_integer
!     assert_equal('i0e', 0.bencode)
!     assert_equal('i1e', 1.bencode)
!     assert_equal('i10000e', 10000.bencode)
!     assert_equal('i-1000e', -1000.bencode)
!     assert_equal('i9876543210e', 9876543210.bencode)
  
      assert_raise(NoMethodError) { (1.2).bencode }
***************
*** 27,44 ****
  
    def test_string
!     assert_equal('HELLO'.bencode, '5:HELLO')
!     assert_equal('::::::::::'.bencode, '10:::::::::::')
!     assert_equal('0010020300'.bencode, '10:0010020300')
!     assert_equal('di100e3:ooke'.bencode, '12:di100e3:ooke')
    end
  
    def test_list
!     assert_equal([1,2,3].bencode, 'li1ei2ei3ee')
!     assert_equal([1,2,3,[44,'G'],5].bencode, 'li1ei2ei3eli44e1:Gei5ee')
    end
  
    def test_dict
!     assert_equal({'h' => [0, 0, 0]}.bencode, 'd1:hli0ei0ei0eee')
!     assert_equal({0=>{0=>0}}.bencode, 'di0edi0ei0eee')
    end
  
--- 27,44 ----
  
    def test_string
!     assert_equal('5:HELLO', 'HELLO'.bencode)
!     assert_equal('10:::::::::::', '::::::::::'.bencode)
!     assert_equal('10:0010020300', '0010020300'.bencode)
!     assert_equal('12:di100e3:ooke', 'di100e3:ooke'.bencode)
    end
  
    def test_list
!     assert_equal('li1ei2ei3ee', [1,2,3].bencode)
!     assert_equal('li1ei2ei3eli44e1:Gei5ee', [1,2,3,[44,'G'],5].bencode)
    end
  
    def test_dict
!     assert_equal('d1:hli0ei0ei0eee', {'h' => [0, 0, 0]}.bencode)
!     assert_equal('di0edi0ei0eee', {0=>{0=>0}}.bencode)
    end
  
***************
*** 54,59 ****
--- 54,71 ----
      data = [[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]
      assert_raise(RuntimeError){ data.bencode }
+ 
+     test = 'test'
+     data = { test => { test => { test => { test => { test => 
+            { test => { test => { test => { test => { test => 
+            { test => { test => { test => { test => { test => 
+            { test => { test => { test => { test => { test => 
+            { test => 0 }
+           } } } } } } } } } } } } } } } } } } } }
+ 
+     # FIXME Segmentation Fault in Ruby1.9(cvs)
+     assert_raise(RuntimeError){ data.bencode }
    end
  
+ 
    def test_null_string
      # FIXME



More information about the Aversa-commits mailing list