project denial of service on tree browser edge case

Lauren Pullen <[email protected]> Sat, 11 Jul 2026 14:38:44 -0600
Newsgroups gmane.comp.lang.smalltalk.squeak.general
Message-ID <[email protected]>
Hi List,

I tried to reproduce this, but was unable to.  I somehow got morphic to 
flood the project with debugger windows.  I'm honestly not sure what 
happened... I think I saw a filter appear and the list empty out right 
before the flood happened.

I was able to close the project with some difficulty; luckily I lost 
nothing but the time trying to make it happen again.

Because I can't reproduce the issue, should we leave it at extremely 
unlucky?

Squeak-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
SqueakDebug.log (text/plain, 17.2 KB)
MessageNotUnderstood: UndefinedObject>>categories
11 July 2026 1:59:11.590596 pm

VM: Mac OS - Smalltalk
Image: Squeak6.1rc1 [latest update: #23890]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /Users/lauren/program/opensmalltalk-vm/image
Trusted Dir /Users/lauren/program/opensmalltalk-vm/image/secure
Untrusted Dir /Users/lauren/program/opensmalltalk-vm/image/My Squeak

UndefinedObject(Object)>>doesNotUnderstand: #categories
	Receiver: nil
	Arguments and temporary variables: 
		aMessage: 	categories
		exception: 	MessageNotUnderstood: UndefinedObject>>categories
		resumeValue: 	nil
	Receiver's instance variables: 
nil
TreeBrowser>>messageCategoryLabel:
	Receiver: a TreeBrowser
	Arguments and temporary variables: 
		category: 	#'compiled methods'
		label: 	#'compiled methods'
	Receiver's instance variables: 
		dependents: 	nil
		contents: 	nil
		currentCompiledMethod: 	nil
		contentsSymbol: 	#source
		multiWindowState: 	nil
		environment: 	Smalltalk
		systemOrganizer: 	('Kernel-Classes' BasicClassOrganizer Behavior Categorizer Class...etc...
		classOrganizer: 	nil
		metaClassOrganizer: 	nil
		editSelection: 	#newClass
		metaClassIndicated: 	false
		selectedSystemCategory: 	#'VMMaker-Multithreading'
		selectedClassName: 	nil
		selectedMessageName: 	nil
		selectedMessageCategoryName: 	nil
		classDefinition: 	'StackInterpreterPrimitives subclass: #CoInterpreter
	instance...etc...
		metaClassDefinition: 	'CoInterpreter class
	instanceVariableNames: '''''
		parentCategories: 	a Dictionary(size 674)
		lastSystemCategoryList: 	#(#'Kernel-Classes' #'Kernel-Exceptions' #'Kernel-Excep...etc...
		lastClassList: 	{AtomicValue . CoInterpreterMT . CogThreadManager . CogVMOwnerLog...etc...
		lastMessageCategoryList: 	#()
		isHierarchyMode: 	nil
		classForHierarchy: 	nil
		lastClassListIndentForHierarchy: 	nil
		extraClasses: 	#()

TreeBrowser>>messageCategoryHelpAt:
	Receiver: a TreeBrowser
	Arguments and temporary variables: 
		category: 	#'compiled methods'
	Receiver's instance variables: 
		dependents: 	nil
		contents: 	nil
		currentCompiledMethod: 	nil
		contentsSymbol: 	#source
		multiWindowState: 	nil
		environment: 	Smalltalk
		systemOrganizer: 	('Kernel-Classes' BasicClassOrganizer Behavior Categorizer Class...etc...
		classOrganizer: 	nil
		metaClassOrganizer: 	nil
		editSelection: 	#newClass
		metaClassIndicated: 	false
		selectedSystemCategory: 	#'VMMaker-Multithreading'
		selectedClassName: 	nil
		selectedMessageName: 	nil
		selectedMessageCategoryName: 	nil
		classDefinition: 	'StackInterpreterPrimitives subclass: #CoInterpreter
	instance...etc...
		metaClassDefinition: 	'CoInterpreter class
	instanceVariableNames: '''''
		parentCategories: 	a Dictionary(size 674)
		lastSystemCategoryList: 	#(#'Kernel-Classes' #'Kernel-Exceptions' #'Kernel-Excep...etc...
		lastClassList: 	{AtomicValue . CoInterpreterMT . CogThreadManager . CogVMOwnerLog...etc...
		lastMessageCategoryList: 	#()
		isHierarchyMode: 	nil
		classForHierarchy: 	nil
		lastClassListIndentForHierarchy: 	nil
		extraClasses: 	#()

PluggableTreeMorph>>balloonTextForNode:
	Receiver: a PluggableTreeMorph<messageCategoryList>(1645175)
	Arguments and temporary variables: 
		node: 	a PluggableTreeItemNode
	Receiver's instance variables: 
		bounds: 	825@635 corner: 1137@958
		owner: 	a PluggableSystemWindow<System Browser>(858216)
		submorphs: 	{a TransformMorph(3544969)}
		fullBounds: 	825@635 corner: 1137@958
		color: 	Color white
		extension: 	a MorphExtension (1435395) [externalName = messageCategoryList ]  [o...etc...
		borderWidth: 	2
		borderColor: 	(Color r: 0.509 g: 0.6 b: 0.419)
		model: 	a TreeBrowser
		slotName: 	nil
		open: 	false
		scrollBar: 	a ScrollBar(1968904)
		scroller: 	a TransformMorph(3544969)
		retractableScrollBar: 	false
		scrollBarOnLeft: 	true
		getMenuSelector: 	#messageCategoryMenu:
		getMenuTitleSelector: 	nil
		hasFocus: 	true
		hScrollBar: 	a ScrollBar(2015571)
		hScrollBarPolicy: 	#never
		vScrollBarPolicy: 	#whenNeeded
		scrollBarThickness: 	28
		selectedMorph: 	nil
		selectedMorphIndex: 	nil
		hoveredMorph: 	an IndentingListItemMorph(298211)#'compiled methods'
		getListSelector: 	nil
		keystrokeActionSelector: 	#messageCategoryListKey:from:
		autoDeselect: 	true
		autoExpand: 	false
		autoExpandSelector: 	nil
		columns: 	nil
		columnsCache: 	#()
		sortingSelector: 	nil
		getSelectionSelector: 	#messageCategoryChild
		setSelectionSelector: 	#messageCategoryChild:
		potentialDropMorph: 	nil
		lineColor: 	Color veryVeryLightGray
		font: 	a TTCFont(BitstreamVeraSansForSqueak Roman 10.5pt 192ppi 28px)
		textColor: 	Color black
		rootWrappers: 	#()
		selectedWrapper: 	nil
		getRootsSelector: 	#messageCategoryRoots
		getChildrenSelector: 	#messageCategoryChildren:
		hasChildrenSelector: 	#messageCategoryHasChildren:
		getLabelSelector: 	#messageCategoryLabel:
		getIconSelector: 	nil
		getSelectedPathSelector: 	#messageCategoryPath
		setSelectedPathSelector: 	nil
		setSelectedParentSelector: 	nil
		getHelpSelector: 	#messageCategoryHelpAt:
		dropItemSelector: 	#drop:onMessageCategory:copy:
		wantsDropSelector: 	#wantsToDrop:type:source:morph:onMessageCategory:
		dragItemSelector: 	#dragFromMessageCategory:
		dragTypeSelector: 	#dragTypeForMessageCategory:
		nodeClass: 	nil
		lastKeystrokeTime: 	0
		lastKeystrokes: 	''
		dragStartedSelector: 	nil
		doubleClickSelector: 	nil
		findText: 	nil
		findQueue: 	nil
		filterColumnIndex: 	nil
		filterMode: 	#all
		searchMode: 	#depthFirst
		priorSelection: 	nil

PluggableTreeItemNode>>balloonText
	Receiver: a PluggableTreeItemNode
	Arguments and temporary variables: 

	Receiver's instance variables: 
		item: 	#'compiled methods'
		model: 	a PluggableTreeMorph<messageCategoryList>(1645175)
		parent: 	nil
		index: 	nil

IndentingListItemMorph>>balloonText
	Receiver: an IndentingListItemMorph(298211)#'compiled methods'
	Arguments and temporary variables: 

	Receiver's instance variables: 
		bounds: 	0@272 corner: 9999@306
		owner: 	nil
		submorphs: 	#()
		fullBounds: 	0@272 corner: 9999@306
		color: 	Color black
		extension: 	a MorphExtension (3918691) [other:  (hoverColor -> (TranslucentColor...etc...
		font: 	a TTCFont(BitstreamVeraSansForSqueak Roman 10.5pt 192ppi 28px)
		emphasis: 	nil
		contents: 	#'compiled methods'
		hasFocus: 	false
		indentLevel: 	0
		canExpand: 	false
		isExpanded: 	false
		complexContents: 	a PluggableTreeItemNode
		firstChild: 	nil
		container: 	a PluggableTreeMorph<messageCategoryList>(1645175)
		nextSibling: 	an IndentingListItemMorph(2939068)#'control primitives'
		icon: 	nil
		backgroundColor: 	nil
		filterOffsets: 	#()

IndentingListItemMorph(Morph)>>wantsBalloon
	Receiver: an IndentingListItemMorph(298211)#'compiled methods'
	Arguments and temporary variables: 

	Receiver's instance variables: 
		bounds: 	0@272 corner: 9999@306
		owner: 	nil
		submorphs: 	#()
		fullBounds: 	0@272 corner: 9999@306
		color: 	Color black
		extension: 	a MorphExtension (3918691) [other:  (hoverColor -> (TranslucentColor...etc...
		font: 	a TTCFont(BitstreamVeraSansForSqueak Roman 10.5pt 192ppi 28px)
		emphasis: 	nil
		contents: 	#'compiled methods'
		hasFocus: 	false
		indentLevel: 	0
		canExpand: 	false
		isExpanded: 	false
		complexContents: 	a PluggableTreeItemNode
		firstChild: 	nil
		container: 	a PluggableTreeMorph<messageCategoryList>(1645175)
		nextSibling: 	an IndentingListItemMorph(2939068)#'control primitives'
		icon: 	nil
		backgroundColor: 	nil
		filterOffsets: 	#()

HandMorph>>removePendingBalloonFor:
	Receiver: a HandMorph(3663638)
	Arguments and temporary variables: 
		aMorph: 	an IndentingListItemMorph(298211)#'compiled methods'
	Receiver's instance variables: 
		bounds: 	51@11 corner: 83@43
		owner: 	a PasteUpMorph(3052915) [world]
		submorphs: 	#()
		fullBounds: 	51@11 corner: 83@43
		color: 	Color blue
		extension: 	a MorphExtension (3138192) [other:  (borderStyle -> a BorderStyle) (...etc...
		mouseFocus: 	nil
		keyboardFocus: 	nil
		eventListeners: 	nil
		mouseListeners: 	nil
		keyboardListeners: 	nil
		eventCaptureFilters: 	nil
		mouseCaptureFilters: 	nil
		keyboardCaptureFilters: 	a WeakArray(a HandMorph(3663638))
		mouseClickState: 	nil
		mouseOverHandler: 	a MouseOverHandler
		targetOffset: 	1240@598
		lastMouseEvent: 	[51@11 51@11 mouseMove 35622852]
		lastKeyDownEvent: 	[1259@662 keyDown (55) 35616417]
		damageRecorder: 	a DamageRecorder
		cacheCanvas: 	nil
		cachedCanvasHasHoles: 	true
		temporaryCursor: 	nil
		temporaryCursorOffset: 	nil
		hardwareCursor: 	nil
		hasChanged: 	true
		savedPatch: 	nil
		userInitials: 	''
		lastEventBuffer: 	#(1 35622852 51 11 0 0 1 1)
		genieGestureProcessor: 	nil
		keyboardInterpreter: 	a MacUnicodeInputInterpreter
		externalDropMorph: 	nil

IndentingListItemMorph(Morph)>>handleMouseLeave:
	Receiver: an IndentingListItemMorph(298211)#'compiled methods'
	Arguments and temporary variables: 
		anEvent: 	[51@11 mouseLeave nil]
	Receiver's instance variables: 
		bounds: 	0@272 corner: 9999@306
		owner: 	nil
		submorphs: 	#()
		fullBounds: 	0@272 corner: 9999@306
		color: 	Color black
		extension: 	a MorphExtension (3918691) [other:  (hoverColor -> (TranslucentColor...etc...
		font: 	a TTCFont(BitstreamVeraSansForSqueak Roman 10.5pt 192ppi 28px)
		emphasis: 	nil
		contents: 	#'compiled methods'
		hasFocus: 	false
		indentLevel: 	0
		canExpand: 	false
		isExpanded: 	false
		complexContents: 	a PluggableTreeItemNode
		firstChild: 	nil
		container: 	a PluggableTreeMorph<messageCategoryList>(1645175)
		nextSibling: 	an IndentingListItemMorph(2939068)#'control primitives'
		icon: 	nil
		backgroundColor: 	nil
		filterOffsets: 	#()

MouseEvent>>sentTo:
	Receiver: [51@11 mouseLeave nil]
	Arguments and temporary variables: 
		anObject: 	an IndentingListItemMorph(298211)#'compiled methods'
	Receiver's instance variables: 
		timeStamp: 	nil
		source: 	a HandMorph(3663638)
		type: 	#mouseLeave
		buttons: 	0
		position: 	51@11
		handler: 	nil
		wasHandled: 	false
		wasIgnored: 	false

IndentingListItemMorph(Morph)>>handleEvent:
	Receiver: an IndentingListItemMorph(298211)#'compiled methods'
	Arguments and temporary variables: 
		anEvent: 	[51@11 mouseLeave nil]
		filteredEvent: 	[51@11 mouseLeave nil]
	Receiver's instance variables: 
		bounds: 	0@272 corner: 9999@306
		owner: 	nil
		submorphs: 	#()
		fullBounds: 	0@272 corner: 9999@306
		color: 	Color black
		extension: 	a MorphExtension (3918691) [other:  (hoverColor -> (TranslucentColor...etc...
		font: 	a TTCFont(BitstreamVeraSansForSqueak Roman 10.5pt 192ppi 28px)
		emphasis: 	nil
		contents: 	#'compiled methods'
		hasFocus: 	false
		indentLevel: 	0
		canExpand: 	false
		isExpanded: 	false
		complexContents: 	a PluggableTreeItemNode
		firstChild: 	nil
		container: 	a PluggableTreeMorph<messageCategoryList>(1645175)
		nextSibling: 	an IndentingListItemMorph(2939068)#'control primitives'
		icon: 	nil
		backgroundColor: 	nil
		filterOffsets: 	#()

[] in MouseOverHandler>>processMouseOver:
	Receiver: a MouseOverHandler
	Arguments and temporary variables: 
		anEvent: 	[51@11 51@11 mouseMove 35622852]
		hand: 	a HandMorph(3663638)
		focus: 	nil
		localEvt: 	[51@11 mouseLeave nil]
		evt: 	[51@11 mouseLeave nil]
		m: 	an IndentingListItemMorph(298211)#'compiled methods'
	Receiver's instance variables: 
		mouseOverMorphs: 	{a PluggableSystemWindow<System Browser: MPI>(57769) . a PasteUpMorph...etc...
		enteredMorphs: 	a WriteStream
		overMorphs: 	a WriteStream
		leftMorphs: 	{a PluggableSystemWindow<System Browser: MPI>(57769) . a MenuItemMorph...etc...

Array(SequenceableCollection)>>do:
	Receiver: {a PluggableSystemWindow<System Browser: MPI>(57769) . a MenuItemMorph(3660802)'Close all ...etc...
	Arguments and temporary variables: 
		aBlock: 	[closure] in MouseOverHandler>>processMouseOver:
		index: 	25
		indexLimiT: 	27
	Receiver's instance variables: 
{a PluggableSystemWindow<System Browser: MPI>(57769) . a MenuItemMorph(3660802)'Close all ...etc...
MouseOverHandler>>processMouseOver:
	Receiver: a MouseOverHandler
	Arguments and temporary variables: 
		anEvent: 	[51@11 51@11 mouseMove 35622852]
		hand: 	a HandMorph(3663638)
		focus: 	nil
		localEvt: 	[51@11 mouseLeave nil]
		evt: 	[51@11 mouseLeave nil]
	Receiver's instance variables: 
		mouseOverMorphs: 	{a PluggableSystemWindow<System Browser: MPI>(57769) . a PasteUpMorph...etc...
		enteredMorphs: 	a WriteStream
		overMorphs: 	a WriteStream
		leftMorphs: 	{a PluggableSystemWindow<System Browser: MPI>(57769) . a MenuItemMorph...etc...

HandMorph>>processEvents
	Receiver: a HandMorph(3663638)
	Arguments and temporary variables: 
		evtBuf: 	nil
		hadAny: 	false
		evt: 	nil
	Receiver's instance variables: 
		bounds: 	51@11 corner: 83@43
		owner: 	a PasteUpMorph(3052915) [world]
		submorphs: 	#()
		fullBounds: 	51@11 corner: 83@43
		color: 	Color blue
		extension: 	a MorphExtension (3138192) [other:  (borderStyle -> a BorderStyle) (...etc...
		mouseFocus: 	nil
		keyboardFocus: 	nil
		eventListeners: 	nil
		mouseListeners: 	nil
		keyboardListeners: 	nil
		eventCaptureFilters: 	nil
		mouseCaptureFilters: 	nil
		keyboardCaptureFilters: 	a WeakArray(a HandMorph(3663638))
		mouseClickState: 	nil
		mouseOverHandler: 	a MouseOverHandler
		targetOffset: 	1240@598
		lastMouseEvent: 	[51@11 51@11 mouseMove 35622852]
		lastKeyDownEvent: 	[1259@662 keyDown (55) 35616417]
		damageRecorder: 	a DamageRecorder
		cacheCanvas: 	nil
		cachedCanvasHasHoles: 	true
		temporaryCursor: 	nil
		temporaryCursorOffset: 	nil
		hardwareCursor: 	nil
		hasChanged: 	true
		savedPatch: 	nil
		userInitials: 	''
		lastEventBuffer: 	#(1 35622852 51 11 0 0 1 1)
		genieGestureProcessor: 	nil
		keyboardInterpreter: 	a MacUnicodeInputInterpreter
		externalDropMorph: 	nil

[] in [] in WorldState>>doOneCycleNowFor:
	Receiver: a WorldState
	Arguments and temporary variables: 
		aWorld: 	a PasteUpMorph(3052915) [world]
		capturingGesture: 	false
		hand: 	a HandMorph(3663638)
	Receiver's instance variables: 
		hands: 	{a HandMorph(3663638)}
		viewBox: 	0@0 corner: 2704@1628
		canvas: 	a FormCanvas on: Form(2704x1628x32)
		damageRecorder: 	a DamageRecorder
		stepList: 	a Heap(StepMessage(#stepAt: -> a ClockMorph(3634769)'13:59:09')(a ClockMorph...etc...
		lastStepTime: 	3961252749707
		lastStepMessage: 	nil
		lastCycleTime: 	3961252751589
		commandHistory: 	a CommandHistory
		alarms: 	a MorphicAlarmQueue
		lastAlarmTime: 	3961252749707
		remoteServer: 	nil
		multiCanvas: 	nil
		interCycleDelay: 	a Delay(20 msecs)

[] in ActiveHandVariable class(DynamicVariable class)>>value:during:
	Receiver: ActiveHandVariable
	Arguments and temporary variables: 
		anObject: 	a HandMorph(3663638)
		aBlock: 	[closure] in [] in WorldState>>doOneCycleNowFor:
		p: 	a Process(67114) in nil
		oldValue: 	nil
		outerScopeWasDynamic: 	false
	Receiver's instance variables: 
		superclass: 	DynamicVariable
		methodDict: 	a MethodDictionary()
		format: 	0
		instanceVariables: 	nil
		organization: 	('as yet unclassified')

		subclasses: 	nil
		name: 	#ActiveHandVariable
		classPool: 	nil
		sharedPools: 	nil
		environment: 	Smalltalk
		category: 	#'Morphic-Worlds'
		hash: 	2651829

FullBlockClosure(BlockClosure)>>ensure:
	Receiver: [closure] in ActiveHandVariable class(DynamicVariable class)>>value:during:
	Arguments and temporary variables: 
		aBlock: 	[closure] in ActiveHandVariable class(DynamicVariable class)>>value:during:...etc...
		completionStatus: 	nil
		returnValue: 	nil
	Receiver's instance variables: 
		outerContext: 	ActiveHandVariable class(DynamicVariable class)>>value:during:
		startpcOrMethod: 	([] in DynamicVariable class>>#value:during: "a CompiledBlock(...etc...
		numArgs: 	0
		receiver: 	ActiveHandVariable

ActiveHandVariable class(DynamicVariable class)>>value:during:
	Receiver: ActiveHandVariable
	Arguments and temporary variables: 
		anObject: 	a HandMorph(3663638)
		aBlock: 	[closure] in [] in WorldState>>doOneCycleNowFor:
		p: 	a Process(67114) in nil
		oldValue: 	nil
		outerScopeWasDynamic: 	false
	Receiver's instance variables: 
		superclass: 	DynamicVariable
		methodDict: 	a MethodDictionary()
		format: 	0
		instanceVariables: 	nil
		organization: 	('as yet unclassified')

		subclasses: 	nil
		name: 	#ActiveHandVariable
		classPool: 	nil
		sharedPools: 	nil
		environment: 	Smalltalk
		category: 	#'Morphic-Worlds'
		hash: 	2651829


--- The full stack ---
UndefinedObject(Object)>>doesNotUnderstand: #categories
TreeBrowser>>messageCategoryLabel:
TreeBrowser>>messageCategoryHelpAt:
PluggableTreeMorph>>balloonTextForNode:
PluggableTreeItemNode>>balloonText
IndentingListItemMorph>>balloonText
IndentingListItemMorph(Morph)>>wantsBalloon
HandMorph>>removePendingBalloonFor:
IndentingListItemMorph(Morph)>>handleMouseLeave:
MouseEvent>>sentTo:
IndentingListItemMorph(Morph)>>handleEvent:
[] in MouseOverHandler>>processMouseOver:
Array(SequenceableCollection)>>do:
MouseOverHandler>>processMouseOver:
HandMorph>>processEvents
[] in [] in WorldState>>doOneCycleNowFor:
[] in ActiveHandVariable class(DynamicVariable class)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveHandVariable class(DynamicVariable class)>>value:during:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[] in ActiveHandVariable class>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
ActiveHandVariable class>>value:during:
HandMorph>>becomeActiveDuring:
[] in WorldState>>doOneCycleNowFor:
Array(SequenceableCollection)>>do:
WorldState>>handsDo:
WorldState>>doOneCycleNowFor:
WorldState>>doOneCycleFor:
PasteUpMorph>>doOneCycle
[] in MorphicProject>>spawnNewProcess
[] in FullBlockClosure(BlockClosure)>>newProcess