Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 332505

Summary: [JFace Validators] Stack overflow when using MultiValidator
Product: [Eclipse Project] Platform Reporter: Stefan Röck <stefan.roeck>
Component: UIAssignee: Platform-UI-Inbox <Platform-UI-Inbox>
Status: CLOSED DUPLICATE QA Contact:
Severity: major    
Priority: P3 CC: daniel_megert, ruediger.herrmann
Version: 3.6.2   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:

Description Stefan Röck CLA 2010-12-14 05:14:29 EST
Using org.eclipse.core.databinding_1.3.100

There's a conceptual error in MultiValidator#revalidate() which leads to a dependency loop.
Let's assume that ObservableTracker returns the following dependencies:
dep[0] = observable1;
dep[1] = observable2;
dep[2] = targets; // same instance as the field target in this class MultiValidator

The field "targets" holds:
targets[0] = observable1;
targets[1] = observable2;

Because the outer loop iterates over targets, the invalid dependency to the field "targets" is not removed from newTargets and then added.
This causes the endless loop in subsequent calls.


Stacktrace snippet:
	at org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
	at org.eclipse.core.databinding.observable.AbstractObservable.fireChange(AbstractObservable.java:65)
	at org.eclipse.core.databinding.observable.list.ObservableList.fireListChange(ObservableList.java:72)
	at org.eclipse.core.databinding.observable.list.WritableList.addAll(WritableList.java:191)
	at org.eclipse.core.databinding.validation.MultiValidator.revalidate(MultiValidator.java:295)
	at org.eclipse.core.databinding.validation.MultiValidator$DependencyListener.handleChange(MultiValidator.java:152)
	at org.eclipse.core.databinding.observable.ChangeEvent.dispatch(ChangeEvent.java:41)
	at org.eclipse.core.databinding.observable.ChangeManager.fireEvent(ChangeManager.java:119)
Comment 1 Dani Megert CLA 2010-12-14 05:37:04 EST

*** This bug has been marked as a duplicate of bug 332504 ***