fix: delete_func_by_name in ModuleImports
/ModuleExports
#251
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The functions
ModuleExports::delete_func_by_name
andModuleImports::delete_func_by_name
were broken due to the possibility of the same function ID being used in multiple exports.Since the code was getting the "first" function ID it found with a matching name (or name & module in the case of imports), deleting that export could mean deleting a different export ahead of time.
A worked example:
Things are fine when we use the export name "A" to get the relevant function ID, but when we use that ID to look up an export, it's unclear which one we will get -- searching by function ID would surface either existing export. The existing functions don't actually account for this possibility at all (they just happily return the "first" one).
This commit fixes this by changing the logic of
delete_func_by_name
to use only the export name, and do manual checking for whether the export/import is a function.