[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