Ticket UUID: | 688fcc7082fa99a4bd934098c58666841e9e0b0a | |||
Title: | trace on imported alias deletes alias and then calls import and triggers memory error | |||
Type: | Bug | Version: | ||
Submitter: | pooryorick | Created on: | 2020-08-16 09:52:56 | |
Subsystem: | - New Builtin Commands | Assigned To: | pooryorick | |
Priority: | 5 Medium | Severity: | Minor | |
Status: | Closed | Last Modified: | 2021-06-21 21:36:36 | |
Resolution: | Fixed | Closed By: | pooryorick | |
Closed on: | 2021-06-21 21:36:36 | |||
Description: |
(text/x-fossil-wiki)
In Tcl built with <code>-DPURIFY</code> and <code>--enable-symbols</code>, the following script results in a segmentation fault: <code><verbatim> variable res {} namespace eval ns1 { namespace export * proc p1 {} { return success } interp alias {} [namespace current]::p2 {} [namespace current]::p1 } namespace eval ns2 { namespace import [namespace parent]::ns1::p2 } proc ondelete {oldname newname op} { variable res catch { $oldname } cres set res [string match {invalid command name*ns1::p1*} $cres] } trace add command ns2::p2 delete ondelete namespace delete ns1 </verbatim></code> The issue is that the delete trace on the imported routine deletes the namespace of the underlying routine, resulting in the deletion of both the underlying routine and the alias, but then the imported command is called, and its <code>ImportedCmdData</code> structure still holds a reference to the now-deleted Alias structure. | |||
User Comments: |
pooryorick added on 2021-06-21 21:36:11:
(text/x-fossil-wiki)
This fix was committed to core-8-branch in [037c0ff27fd5d0a2] and also made its way to trunk via merge of core-8-branch. [3b0e92b198b86975] is unrelated and shouldn't have been noted in this report. jan.nijtmans added on 2021-05-20 15:53:22: (text/x-fossil-wiki) @pooryorick: Noting that commit [3b0e92b198b86975] was on core-8-branch, is this bug now fixed on all branches? jan.nijtmans added on 2021-05-18 15:10:26: (text/x-fossil-wiki) This - indeed - looks OK now, but it's only applied to 8.6 yet. Will 8.7 and 9.0 follow soon? Then it can be closed. pooryorick added on 2021-05-18 14:30:25: (text/x-fossil-wiki) Fixed again in [3b0e92b198b86975]. jan.nijtmans added on 2021-05-18 08:47:19: (text/x-fossil-wiki) Re-opening, because this fix broke the build: [https://github.com/tcltk/tcl/actions/runs/852459210] pooryorick added on 2021-05-17 21:35:32: (text/x-fossil-wiki) Fix applied to core-8-6-branch in [e45d054ba46ee5c2]. pooryorick added on 2020-08-16 10:06:37: (text/x-fossil-wiki) Fixed in [037c0ff27fd5d0a2] by modifying <code>Tcl_DeleteCommandFromToken()</code> so that it deletes any imports of the routine before deleting the routine itself. |