Tcl Library Source Code

View Ticket
Login
Bounty program for improvements to Tcl and certain Tcl packages.
Tcl 2019 Conference, Houston/TX, US, Nov 4-8
Send your abstracts to [email protected]
or submit via the online form by Sep 9.
Ticket UUID: 1016865
Title: md5 test suite causes tcl core dump!
Type: Bug Version: None
Submitter: lvirden Created on: 2004-08-26 13:45:41
Subsystem: md5 Assigned To: andreas_kupries
Priority: 9 Immediate Severity:
Status: Closed Last Modified: 2005-10-07 04:12:17
Resolution: Fixed Closed By: andreas_kupries
    Closed on: 2005-10-06 21:12:17
Description:
platform: sparc sunblade 100 solaris 8, sun c compiler,
tcl 8.4.7, tcllib latest cvs snapshot - this has been
going on for a day or so now.


Module: md5
modules/md5/md5.test
- md5 1.4.3 (Trf based)
modules/md5/md5x.test
- md5 2.0.1 (Trf based)

Module: md5crypt
modules/md5crypt/md5crypt.test
- md5crypt 1.0.0 (pure Tcl)
child killed: bus error
    while executing
"exec [info nameofexecutable]  [file join $distribution
all.tcl]  -modules $modules  >@ stdout 2>@ s
tderr"
    (procedure "__test" line 10)
    invoked from within
"__$cmd"
    (file "../sak.tcl" line 1593)
gmake: *** [test] Error 1

The stack trace is a bit peculiar:
 $ dbx /usr/tcl84/bin/tclsh8.4 core
Reading tclsh8.4
core file header read successfully
Reading ld.so.1
Reading libtcl8.4g.so
Reading libdl.so.1
Reading libsocket.so.1
Reading libnsl.so.1
Reading libm.so.1
Reading libc.so.1
Reading libmp.so.2
Reading libc_psr.so.1
Reading libtk8.4g.so
Reading libX11.so.4
Reading libXext.so.0
Reading libTrf2.1g.so
Reading libz.so
Reading libmemchan.so
program terminated by signal BUS (invalid address
alignment)
dbx: warning: can't find file
"/vol/tclsrcsol/tcl84/trf/md5.o"
dbx: warning: see `help finding-files'
0xfec5d4d8: md5_process_block+0x0130:   ld      [%l0], %l5
dbx: warning: can't find file
"/vol/tclsrcsol/tcl84/trf/md5dig.o"
dbx: warning: can't find file
"/vol/tclsrcsol/tcl84/trf/digest.o"
dbx: warning: can't find file
"/vol/tclsrcsol/tcl84/trf/registry.o"
Current function is FlushChannel
 2078                   &errorCode);
(dbx 1) where                                         
               
  [1] md5_process_block(0xff00, 0xd76aa478, 0xff00,
0xffbe80c0, 0x61, 0x5a71dc), at 0xfec5d4d8
  [2] md5_process_bytes(0x5a93a0, 0xc8, 0x5a71c0,
0x5aa3b0, 0x719, 0x5aa3b8), at 0xfec5d324
  [3] MDmd5_UpdateBuf(0x5a71c0, 0x5a93a0, 0xc8, 0x1030,
0x2234c, 0xfefc1ce4), at 0xfec45f7c
  [4] EncodeBuffer(0x2453e0, 0x5a93a0, 0xc8, 0x0,
0xfec77ad8, 0x19e94c), at 0xfec44244
  [5] TrfOutput(0x5a7128, 0x5a93a0, 0xc8, 0xffbe8330,
0x16ee4d, 0xff332b01), at 0xfec30d94
=>[6] FlushChannel(interp = (nil), chanPtr = 0x270560,
calledFromAsyncFlush = 0), line 2078 in "tclIO.c"
  [7] CheckFlush(chanPtr = 0x270560, bufPtr = 0x5a9380,
newlineFlag = 0), line 3429 in "tclIO.c"
  [8] WriteBytes(chanPtr = 0x270560, src = 0x5a2fa0
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
srcLen = 200), line 3040 in "tclIO.c"
  [9] Tcl_WriteObj(chan = 0x34ecd0, objPtr = 0x1fdfa8),
line 2957 in "tclIO.c"
  [10] Tcl_PutsObjCmd(dummy = (nil), interp = 0x1fa328,
objc = 4, objv = 0x19e9a4), line 132 in "tclIOCmd.c"
  [11] TclEvalObjvInternal(interp = 0x1fa328, objc = 4,
objv = 0x19e9a4, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"
  [12] TclExecuteByteCode(interp = 0x1fa328, codePtr =
0xba750), line 1404 in "tclExecute.c"
  [13] TclCompEvalObj(interp = 0x1fa328, objPtr =
0x19a088), line 982 in "tclExecute.c"
  [14] TclObjInterpProc(clientData = 0x1b3a70, interp =
0x1fa328, objc = 3, objv = 0x19e998), line 1100 in
"tclProc.c"
  [15] InvokeImportedCmd(clientData = 0x110bc8, interp
= 0x1fa328, objc = 3, objv = 0x19e998), line 1476 in
"tclNamesp.c"
  [16] TclEvalObjvInternal(interp = 0x1fa328, objc = 3,
objv = 0x19e998, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"
  [17] TclExecuteByteCode(interp = 0x1fa328, codePtr =
0x3551e8), line 1404 in "tclExecute.c"
  [18] TclCompEvalObj(interp = 0x1fa328, objPtr =
0x16aae0), line 982 in "tclExecute.c"
  [19] TclObjInterpProc(clientData = 0x3562b8, interp =
0x1fa328, objc = 4, objv = 0xffbe9424), line 1100 in
"tclProc.c"
  [20] TclEvalObjvInternal(interp = 0x1fa328, objc = 4,
objv = 0xffbe9424, command = 0xff35b5e4 "", length = 0,
flags = 524288), line 3087 in "tclBasic.c"
  [21] Tcl_EvalObjv(interp = 0x1fa328, objc = 4, objv =
0xffbe9424, flags = 524288), line 3203 in "tclBasic.c"
  [22] AliasObjCmd(clientData = 0x24aa10, interp =
0x1fa328, objc = 3, objv = 0xffbe95a8), line 1486 in
"tclInterp.c"
  [23] TclEvalObjvInternal(interp = 0x1fa328, objc = 3,
objv = 0xffbe95a8, command = 0x150b09
"::md5crypt::md5crypt $passwd $salt\n    ", length =
35, flags = 0), line 3087 in "tclBasic.c"
  [24] Tcl_EvalEx(interp = 0x1fa328, script = 0x150b00
"\n        ::md5crypt::md5crypt $passwd $salt\n    ",
numBytes = 48, flags = 262144), line 3683 in "tclBasic.c"
  [25] Tcl_EvalObjEx(interp = 0x1fa328, objPtr =
0x1611e0, flags = 262144), line 4000 in "tclBasic.c"
  [26] Tcl_UplevelObjCmd(dummy = (nil), interp =
0x1fa328, objc = 1, objv = 0x19e994), line 674 in
"tclProc.c"  [27] TclEvalObjvInternal(interp =
0x1fa328, objc = 3, objv = 0x19e98c, command = (nil),
length = 0, flags = 0), line 3087 in "tclBasic.c"
  [28] TclExecuteByteCode(interp = 0x1fa328, codePtr =
0x34f618), line 1404 in "tclExecute.c"
  [29] TclCompEvalObj(interp = 0x1fa328, objPtr =
0x2ae910), line 982 in "tclExecute.c"
  [30] TclObjInterpProc(clientData = 0x247cb0, interp =
0x1fa328, objc = 3, objv = 0x304960), line 1100 in
"tclProc.c"
  [31] TclEvalObjvInternal(interp = 0x1fa328, objc = 3,
objv = 0x304960, command = 0xff35b5e4 "", length = 0,
flags = 262144), line 3087 in "tclBasic.c"
  [32] Tcl_EvalObjv(interp = 0x1fa328, objc = 3, objv =
0x304960, flags = 262144), line 3203 in "tclBasic.c"
  [33] Tcl_EvalObjEx(interp = 0x1fa328, objPtr =
0x96b98, flags = 262144), line 3997 in "tclBasic.c"
  [34] Tcl_UplevelObjCmd(dummy = (nil), interp =
0x1fa328, objc = 1, objv = 0x19e988), line 674 in
"tclProc.c"
  [35] TclEvalObjvInternal(interp = 0x1fa328, objc = 3,
objv = 0x19e980, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"
  [36] TclExecuteByteCode(interp = 0x1fa328, codePtr =
0x371de0), line 1404 in "tclExecute.c"
  [37] TclCompEvalObj(interp = 0x1fa328, objPtr =
0x1f9a68), line 982 in "tclExecute.c"
  [38] TclObjInterpProc(clientData = 0x25fa80, interp =
0x1fa328, objc = 3, objv = 0x1a8348), line 1100 in
"tclProc.c"
  [39] TclEvalObjvInternal(interp = 0x1fa328, objc = 3,
objv = 0x1a8348, command = 0xff35b5e4 "", length = 0,
flags = 262144), line 3087 in "tclBasic.c"
  [40] Tcl_EvalObjv(interp = 0x1fa328, objc = 3, objv =
0x1a8348, flags = 262144), line 3203 in "tclBasic.c"
  [41] Tcl_EvalObjEx(interp = 0x1fa328, objPtr =
0x24f138, flags = 262144), line 3997 in "tclBasic.c"
  [42] Tcl_UplevelObjCmd(dummy = (nil), interp =
0x1fa328, objc = 1, objv = 0x19e97c), line 674 in
"tclProc.c"
  [43] TclEvalObjvInternal(interp = 0x1fa328, objc = 3,
objv = 0x19e974, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"
  [44] TclExecuteByteCode(interp = 0x1fa328, codePtr =
0x37ad00), line 1404 in "tclExecute.c"
  [45] TclCompEvalObj(interp = 0x1fa328, objPtr =
0x250c70), line 982 in "tclExecute.c"
  [46] TclObjInterpProc(clientData = 0x12d048, interp =
0x1fa328, objc = 5, objv = 0x19e960), line 1100 in
"tclProc.c"
  [47] InvokeImportedCmd(clientData = 0x2527d8, interp
= 0x1fa328, objc = 5, objv = 0x19e960), line 1476 in
"tclNamesp.c"
  [48] TclEvalObjvInternal(interp = 0x1fa328, objc = 5,
objv = 0x19e960, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"
  [49] TclExecuteByteCode(interp = 0x1fa328, codePtr =
0x8a6a0), line 1404 in "tclExecute.c"  [50]
TclCompEvalObj(interp = 0x1fa328, objPtr = 0x98848),
line 982 in "tclExecute.c"
  [51] Tcl_EvalObjEx(interp = 0x1fa328, objPtr =
0x98848, flags = 0), line 4012 in "tclBasic.c"
  [52] Tcl_ForeachObjCmd(dummy = (nil), interp =
0x1fa328, objc = 4, objv = 0xffbeb750), line 1863 in
"tclCmdAH.c"
  [53] TclEvalObjvInternal(interp = 0x1fa328, objc = 4,
objv = 0xffbeb750, command = 0x2a6408 "foreach {n salt
passwd expected} [list \\n    1    {a}  {} 
{$1$a$8CfZSfErbeskipdhZHtvu.} \\n    2    {a}  {a}
{$1$a$44cUw6Nm5bX0muHWNIwub0} \\n    3    {a}  [string
repeat a  100] {$1$a$vTAcWEblAgdUlX6KBz0NM.} \\n    4 
  {a}  [string repeat a  200]
{$1$a$kC.K4D6mvUznpkjWJK8Tm0} \\n    5    {a}  [string
repeat a  400] {$1$a$nBvNVTsAryOnHlW7L/gzf/} \\n    6 
  {a}  [string repeat a 1000]
{$1$a$yhNnTV4IKHbl8oEB/eJaj0} \\n] {\n    test
md5passwd-4.${n} {md5crypt check passwd} {\n       
::md5crypt::md5crypt $passwd $s" ..., length = 800,
flags = 0), line 3087 in "tclBasic.c"
  [54] Tcl_EvalEx(interp = 0x1fa328, script = 0x2a55c8
"# -*- tcl -*-\n# md5crypt.test:  tests for the
md5crypt commands\n#\n# This file contains a collection
of tests for one or more of the Tcllib\n# commands. 
Sourcing this file into Tcl runs the tests and
generates\n# output for errors.  No output means no
errors were found.\n#\n# Copyright (C) 2003 Pat Thoyts
<[email protected]>\n#\n# RCS: @(#) $Id:
md5crypt.test,v 1.5 2004/02/14 05:59:21 andreas_kupries
Exp $\n\n#
-------------------------------------------------------------------------\n#
Initialize the " ..., numBytes = 5337, flags = 0), line
3683 in "tclBasic.c"
  [55] Tcl_FSEvalFile(interp = 0x1fa328, pathPtr =
0x250628), line 1749 in "tclIOUtil.c"
  [56] Tcl_SourceObjCmd(dummy = (nil), interp =
0x1fa328, objc = 2, objv = 0x19e958), line 1058 in
"tclCmdMZ.c"
  [57] TclEvalObjvInternal(interp = 0x1fa328, objc = 2,
objv = 0x19e958, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"
  [58] TclExecuteByteCode(interp = 0x1fa328, codePtr =
0x1c0a30), line 1404 in "tclExecute.c"
  [59] TclCompEvalObj(interp = 0x1fa328, objPtr =
0x2321c0), line 982 in "tclExecute.c"
  [60] Tcl_EvalObjEx(interp = 0x1fa328, objPtr =
0x2321c0, flags = 0), line 4012 in "tclBasic.c"
  [61] Tcl_CatchObjCmd(dummy = (nil), interp =
0x1fa328, objc = 3, objv = 0x19e94c), line 254 in
"tclCmdAH.c"
  [62] TclEvalObjvInternal(interp = 0x1fa328, objc = 3,
objv = 0x19e94c, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"
  [63] TclExecuteByteCode(interp = 0x1fa328, codePtr =
0x12ba00), line 1404 in "tclExecute.c"
  [64] TclCompEvalObj(interp = 0x1fa328, objPtr =
0x163978), line 982 in "tclExecute.c"
  [65] Tcl_EvalObjEx(interp = 0x1fa328, objPtr =
0x163978, flags = 0), line 4012 in "tclBasic.c"
  [66] SlaveEval(interp = 0x23858, slaveInterp =
0x1fa328, objc = 1, objv = 0x254b4), line 2094 in
"tclInterp.c"
  [67] SlaveObjCmd(clientData = 0x1fa328, interp =
0x23858, objc = 3, objv = 0x254ac), line 1933 in
"tclInterp.c"
  [68] TclEvalObjvInternal(interp = 0x23858, objc = 3,
objv = 0x254ac, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"

  [69] TclExecuteByteCode(interp = 0x23858, codePtr =
0x152030), line 1404 in "tclExecute.c"
  [70] TclCompEvalObj(interp = 0x23858, objPtr =
0x4de78), line 982 in "tclExecute.c"
  [71] Tcl_EvalObjEx(interp = 0x23858, objPtr =
0x4de78, flags = 0), line 4012 in "tclBasic.c"
  [72] Tcl_ForeachObjCmd(dummy = (nil), interp =
0x23858, objc = 4, objv = 0x2549c), line 1863 in
"tclCmdAH.c"
  [73] TclEvalObjvInternal(interp = 0x23858, objc = 4,
objv = 0x2549c, command = (nil), length = 0, flags =
0), line 3087 in "tclBasic.c"
  [74] TclExecuteByteCode(interp = 0x23858, codePtr =
0xb2548), line 1404 in "tclExecute.c"
  [75] TclCompEvalObj(interp = 0x23858, objPtr =
0x31300), line 982 in "tclExecute.c"
  [76] Tcl_EvalObjEx(interp = 0x23858, objPtr =
0x31300, flags = 0), line 4012 in "tclBasic.c"
  [77] Tcl_ForeachObjCmd(dummy = (nil), interp =
0x23858, objc = 4, objv = 0xffbecda8), line 1863 in
"tclCmdAH.c"
  [78] TclEvalObjvInternal(interp = 0x23858, objc = 4,
objv = 0xffbecda8, command = 0x34c55 "foreach module
$modules {\n    set ::tcltest::testsDirectory [file
join $root modules $module]\n\n    if { ![file
isdirectory $::tcltest::testsDirectory] } {\n^Iputs
stdout "unknown module $module"\n    }\n\n    set
auto_path $old_apath\n    set auto_path [linsert
$auto_path 0 $::tcltest::testsDirectory]\n\n    #
foreach module, make a slave interp and source that
module's tests into\n    # the slave.  This isolates
the test suites from one another.\n    puts stdout
"Module:\t[file tail $module]"\n    set c [interp
creat" ..., length = 3554, flags = 0), line 3087 in
"tclBasic.c"
  [79] Tcl_EvalEx(interp = 0x23858, script = 0x33de8 "#
all.tcl --\n#\n# This file contains a top-level script
to run all of the Tcl\n# tests.  Execute it by invoking
"tclsh all.test" in this directory.\n#\n# To test a
subset of the modules, invoke it by 'tclsh all.test
-modules "<module list>"'\n#\n# Copyright (c) 1998-2000
by Ajuba Solutions.\n# All rights reserved.\n# \n# RCS:
@(#) $Id: all.tcl,v 1.19 2004/08/10 07:01:30
andreas_kupries Exp $\n\nset old_auto_path
$auto_path\n\nif {[lsearch [namespace children]
::tcltest] == -1} {\n    namespace eval ::tcltest {}\n
   proc " ..., numBytes = 7355, flags = 0), line 3683
in "tclBasic.c"
  [80] Tcl_FSEvalFile(interp = 0x23858, pathPtr =
0x2c8f8), line 1749 in "tclIOUtil.c"
  [81] Tcl_Main(argc = 3, argv = 0xffbed3f0,
appInitProc = 0x10820 = &Tcl_AppInit(Tcl_Interp
*interp)), line 292 in "tclMain.c"
  [82] main(argc = 4, argv = 0xffbed3ec), line 90 in
"tclAppInit.c"
(dbx 2)
User Comments: andreas_kupries added on 2005-10-07 04:12:17:
Logged In: YES 
user_id=75003

Outside communication by mail ... Apparently we have no
crashes anymore.

andreas_kupries added on 2005-10-01 04:41:39:
Logged In: YES 
user_id=75003

Larry, what is the current status of this ?

andreas_kupries added on 2004-08-26 22:51:37:
Logged In: YES 
user_id=75003

Larry, can you make Trf unavailable and check if the
pure-Tcl version has the same problem ? It should not. The
stacktrace shows the crash clearly in Trf's md5 implementation.

This might be a bug in Trf. Except that Trf has not been
changed in the last day, nor even week.