山本です。

>> まだ良く調べてないんですが、sample/tkextlib/treectrl/mailwasher.rb 
>> でカラムをクリックすると segfault するバグがありました。
>
>(;_;)(;_;)(;_;)(;_;)
>まだ問題が残っているのでしょうね.
>時間ができれば調べてみますが,私だけだと 1.8.3-preview1 には
>間に合わない可能性が極めて高いと思います.
>もし他にも情報がありましたら,教えていただけると助かります.

結論から言うと、tk::treectrl 側のバグでした。
私は http://sourceforge.net/projects/tktreectrl でダウンロードした
tktreectrl-1.1-1 を使っているのですが、この版でカラム数の不足した
項目を登録すると、下のように DictionaryCompare に NULL ポインタが
渡り、それをデリファレンスしようとして SEGV します。

Program received signal SIGSEGV, Segmentation fault.
[Switching to thread 1300.0x440]
0x6ce250eb in DictionaryCompare (left=0x0, right=0x0)
    at generic/tkTreeItem.c:2163
2163            if (isdigit(UCHAR(*right))      /* INTL: digit */
(gdb) bt
#0  0x6ce250eb in DictionaryCompare (left=0x0, right=0x0)
    at generic/tkTreeItem.c:2163
#1  0x6ce2547d in CompareDict (sortData=0x2461370, a=0x95d8f00, b=0x2461250, 
    n=1) at generic/tkTreeItem.c:2269
#2  0x6ce2583a in CompareProc (sortData=0x2461370, a=0x95d8f00, b=0x2461250)
    at generic/tkTreeItem.c:2322
#3  0x6ce25ba2 in partition (sortData=0x2461370, left=0x95d8f00, 
    right=0x95d8f30, pivot=0x2461250) at generic/tkTreeItem.c:2410
#4  0x6ce25cfb in quicksort (sortData=0x2461370, left=0x95d8f00, 
    right=0x95d8f30) at generic/tkTreeItem.c:2464
#5  0x6ce25d24 in quicksort (sortData=0x2461370, left=0x95d8f00, 
    right=0x95d8f48) at generic/tkTreeItem.c:2468
#6  0x6ce25d46 in quicksort (sortData=0x2461370, left=0x95d8ed0, 
    right=0x95d8f48) at generic/tkTreeItem.c:2472
#7  0x6ce26e99 in ItemSortCmd (clientData=0x92a5e78, interp=0x2b85150, 
    objc=11, objv=0x95d8cd0) at generic/tkTreeItem.c:2799
#8  0x6ce2a3da in TreeItemCmd (clientData=0x92a5e78, interp=0x2b85150, 
    objc=11, objv=0x95d8cd0) at generic/tkTreeItem.c:3873
#9  0x6ce0b4f4 in TreeWidgetCmd (clientData=0x92a5e78, interp=0x2b85150, 
    objc=11, objv=0x95d8cd0) at generic/tkTreeCtrl.c:766

ビルドできなかったので確かめてませんが、HEAD ではすでに修正されているようです。

static int
CompareDict(SortData *sortData, struct SortItem *a, struct SortItem *b, int n)
{
    char *left  = a->item1[n].string;
    char *right = b->item1[n].string;

    /* make sure to handle case where no string value has been set */
    if (left == NULL) {
	return ((right == NULL) ? 0 : (0 - UCHAR(*right)));
    } else if (right == NULL) {
	return UCHAR(*left);
    } else {
	return DictionaryCompare(left, right);
    }
}

何で不足していたかというと、下のような理由でした。修正しておきます。

# lib/tkextlib/treectrl でこのバグに対処すべきかどうかはお任せします。

Index: mailwasher.rb
===================================================================
RCS file: /src/ruby/ext/tk/sample/tkextlib/treectrl/mailwasher.rb,v
retrieving revision 1.3
diff -u -w -b -p -r1.3 mailwasher.rb
--- mailwasher.rb	7 Apr 2005 14:55:55 -0000	1.3
+++ mailwasher.rb	9 Apr 2005 16:18:24 -0000
@@ -106,7 +106,7 @@ def demoMailWasher(t)
     ['whoami / spammer.com', "Find out what you think about yourself"],
     ['downsized / spammer.com', "You need a better job"], 
     ['poorhouse / spammer.com', "Your mortgage is a joke"], 
-    ['spam4ever / spammer.com' "You need more spam"]
+    ['spam4ever / spammer.com', "You need more spam"]
   ].each{|frm, subj|
     item = t.item_create
     status = ['styNormal','styPossSpam','styProbSpam','styBlacklist'][rand(4)]