- From: Á¤½Âȯ <thedeft@softwise.co.kr>
- Date: Thu, 4 Oct 2001 20:14:25 +0900
- To: <www-lib@w3.org>
- Message-ID: <000b01c14cc5$ba7d0bb0$50a1e7cb@notquitetrash>
There seem to be two bugs in HTAnchor_delete in HTAnchor.c. I think that one of the bugs has been already mentioned by someone on this mailing list. On lines 503 - 506, while ((child=(HTChildAnchor *) HTList_removeLastObject(kids))) delete_links((HTAnchor *) child); HT_FREE(child->tag); HT_FREE(child); I believe this is meant to be while ((child=(HTChildAnchor *) HTList_removeLastObject(kids))) { delete_links((HTAnchor *) child); HT_FREE(child->tag); HT_FREE(child); } The other is a wrong placement of a bracket. if (!HTList_isEmpty(me->sources)) { /* There are still incoming links */ /* ** Delete all outgoing links from children, if any */ if (me->children) { int cnt = 0; for (; cnt<CHILD_HASH_SIZE; cnt++) { HTList * kids = me->children[cnt]; if (kids) { HTChildAnchor * child; while ((child = (HTChildAnchor *) HTList_nextObject(kids))) delete_links((HTAnchor *) child); return NO; /* Parent not deleted */ } } } /* ** No more incoming links : kill everything ** First, recursively delete children */ if (me->children) { int cnt = 0; for (; cnt<CHILD_HASH_SIZE; cnt++) { HTList * kids = me->children[cnt]; if (kids) { HTChildAnchor * child; while ((child=(HTChildAnchor *) HTList_removeLastObject(kids))) delete_links((HTAnchor *) child); HT_FREE(child->tag); HT_FREE(child); } } } } <---- The comments indicate that the anchor is allowed to be erased only when there are no more incoming sources for the anchor. However, "if (!HTList_isEmpty(me->sources)) {" encloses statements that belong to the no-more-incoming-links case. The bracket at the line 510 should probably be moved somewhere around the line 492.
Received on Thursday, 4 October 2001 07:09:12 UTC