[jdom-interest] How to "crash" JDOM, part 1

trebor.a.rude at lmco.com trebor.a.rude at lmco.com
Thu Aug 31 10:35:43 PDT 2000


	After thinking about this a little more, I suspect we may be making
things harder than they need to be. Given the existing constraint that you
can't add an Element that already has a parent, I can't see any way that
it's possible for an Element to have a pointer to any of its ancestors in
its content list. The only degenerate case I can see is
"element.addContent(element)" on a newly created Element, which can be
solved with a simple check for self-reference in addition to the check for a
null parent. Did I miss a case?

	BTW, that getRootElement() function might be useful, regardless of
whether we need it for solving this particular problem.

Trebor A. Rude
trebor.a.rude at lmco.com

> -----Original Message-----
> From:	David W. Smiley [SMTP:dsmiley at mitre.org]
> Sent:	Thursday, August 31, 2000 11:00 AM
> To:	trebor.a.rude at lmco.com; jdom-interest at jdom.org
> Cc:	Jason Hunter
> Subject:	Re: [jdom-interest] How to "crash" JDOM, part 1
> 
> (corrected subject line)
> 
> I just now realized this is overall a more complicated issue.  I've
> decided to present the following _pseuodocode_ instead:
> 
> private:
> /** If null, is a "root element", possibly a "document root element". */
> Element parentElement= null;
> 
> /** Means that this element and all childs are bound to a document. To
> be true, parentElement must be null. */
> boolean isDocRootElement= false;
> 
> //not same as docRootElement
> package-private:
> Element getRootElement() {
>   return (parentElement == null ? this : parent.getRootElement());
> }
> public:
> addElement(Element b) {
>   if (b.parentElement == null && b != getRootElement())
> 	...add element...
>   else throw 
> }
> removeElement(Element b) {
>   if (b not a child of this)
> 	throw
>   b.parentElement= null;
> }
> Element copyElement() {
>   b= super.clone();
>   ...set other fields, leaving parentElement as null and
> isDocRootElement as false...
> }
> 
> Questions?  Comments?  The only real time-hit here is getRootElement(),
> but that will work really fast, especially considering documents don't
> get that deep.  Each ancestor in-between this and getRootElement doesn't
> need to be checked because they all have an parent whereas 'b' doesn't.
> 
> -- David Smiley
> 



More information about the jdom-interest mailing list