Index: generic/nsf.c =================================================================== diff -u -rf9bd043ef944ad48d9d626408d25d8df241d834d -re75f57c39bdc5455b65317013ed58d2db8d22dbd --- generic/nsf.c (.../nsf.c) (revision f9bd043ef944ad48d9d626408d25d8df241d834d) +++ generic/nsf.c (.../nsf.c) (revision e75f57c39bdc5455b65317013ed58d2db8d22dbd) @@ -12085,7 +12085,7 @@ NsfParamDefs *paramDefs = procPtr ? ParamDefsGet((Tcl_Command)procPtr->cmdPtr) : NULL; Tcl_Obj *list; - if (paramDefs) { + if (paramDefs && paramDefs->paramsPtr) { /* * Obtain parameter info from paramDefs */ Index: library/xotcl/library/xotcl2.tcl =================================================================== diff -u -reb82f3d8597d0eb8b6764997660ccc7c535fd339 -re75f57c39bdc5455b65317013ed58d2db8d22dbd --- library/xotcl/library/xotcl2.tcl (.../xotcl2.tcl) (revision eb82f3d8597d0eb8b6764997660ccc7c535fd339) +++ library/xotcl/library/xotcl2.tcl (.../xotcl2.tcl) (revision e75f57c39bdc5455b65317013ed58d2db8d22dbd) @@ -731,7 +731,7 @@ if {$definition ne ""} { set obj [lindex $definition 0] set modifier [lindex $definition 2] - if {$modifier eq "object"} { + if {$modifier eq "class-object"} { set prefix "" set kind [lindex $definition 3] set name [lindex $definition 4] Index: tests/returns.test =================================================================== diff -u -r6edd8aa86d66687dcfa2c60460de6e9b41ee0051 -re75f57c39bdc5455b65317013ed58d2db8d22dbd --- tests/returns.test (.../returns.test) (revision 6edd8aa86d66687dcfa2c60460de6e9b41ee0051) +++ tests/returns.test (.../returns.test) (revision e75f57c39bdc5455b65317013ed58d2db8d22dbd) @@ -350,4 +350,18 @@ ? {::nsf::methodproperty C lappend returns} "" ? {::nsf::methodproperty ::nx::Object method returns} "" +} + +Test case empty-paramdefs-robustedness { + ::nx::Object create ku { + # Condition 1: An empty or checker-free parameter spec! + :method foo {} {;} + # Condition 2: A call to ::nsf::methodproperty which acquires a + # NsfParamDefs + ::nsf::methodproperty [::nx::current] foo returns; # a returns query + # At this point, we find a NsfParamDefs structure with an empty set + # of params! Subsequent references to paramDefs->paramsPtr in + # e.g. ListCmdParams() would crash ... if not trapped appropriately. + ? [list [::nx::current] info method parameter foo] ""; # boom! + } } \ No newline at end of file