Project

General

Profile

Actions

Bug #1967

closed

Segmentation fault at test_qsort1 and test_qsort2 in test/dl/test_func.rb running on sparc-solaris-2.10

Added by ngoto (Naohisa Goto) over 14 years ago. Updated almost 13 years ago.

Status:
Rejected
Target version:
ruby -v:
ruby 1.9.2dev (2009-08-19) [sparc-solaris2.10]
Backport:
[ruby-dev:39146]

Description

=begin
sparc-solaris-2.10 で 64ビットコンパイルした場合、
make check が test/dl/test_func.rb の test_qsort1 にて
Segmentation fault になります。

原因は、引数の型でした。
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
の size_t 型の引数 nmenb および size に対して TYPE_INT が指定されていますが、
size_t は 64ビット環境では unsigned long になるため、特にsparc v9 のような
ビッグエンディアンの環境では異常な数値が qsort の引数に渡るのが原因でした。

TYPE_INT を TYPE_LONG に変更した以下のパッチで直りました。
(TYPE_SIZE_T は存在しない?)

Index: test/dl/test_func.rb

--- test/dl/test_func.rb (revision 24582)
+++ test/dl/test_func.rb (working copy)
@@ -43,7 +43,7 @@
cb = Function.new(CFunc.new(0, TYPE_INT, 'qsort'),
[TYPE_VOIDP, TYPE_VOIDP]){|x,y| CPtr.new(x)[0] <=> CPtr.new(y)[0]}
qsort = Function.new(CFunc.new(@libc (Eugene Pimenov)['qsort'], TYPE_VOID, 'qsort'),

  •                       [TYPE_VOIDP, TYPE_INT, TYPE_INT, TYPE_VOIDP])
    
  •                       [TYPE_VOIDP, TYPE_LONG, TYPE_LONG, TYPE_VOIDP])
     buff = "9341"
     qsort.call(buff, buff.size, 1, cb)
     assert_equal("1349", buff)
    

@@ -53,7 +53,7 @@
cb = TempFunction.new(CFunc.new(0, TYPE_INT, 'qsort'),
[TYPE_VOIDP, TYPE_VOIDP])
qsort = Function.new(CFunc.new(@libc (Eugene Pimenov)['qsort'], TYPE_VOID, 'qsort'),

  •                       [TYPE_VOIDP, TYPE_INT, TYPE_INT, TYPE_VOIDP])
    
  •                       [TYPE_VOIDP, TYPE_LONG, TYPE_LONG, TYPE_VOIDP])
     buff = "9341"
     qsort.call(buff, buff.size, 1, cb){|x,y| CPtr.new(x)[0] <=> CPtr.new(y)[0]}
     assert_equal("1349", buff)
    

=end


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #1977: test failed in test_isdigit in test/dl/test_func.rb on sparc-solaris-2.10 (64bit)Closedtenderlovemaking (Aaron Patterson)08/21/2009Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0