This repository has been archived by the owner on Nov 17, 2023. It is now read-only.
[BUGFIX] Reject duplicate input names in C Predict API #21141
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.
Description
Avoid a potential uninitialized read when using the C Predict API with symbols where the same input name occurs on more than one node. Other parts of MXNet appear to treat this as an error, so this change makes the C API reject it with an error too.
Since the C Predict API has been removed in MXNet v2 this PR is for merging into the 1.x branch.
Checklist
Essentials
I could not find any existing tests for the C Predict API. Please let me know if there's documentation that should be updated.
Changes
Comments
It's possible to cause an uninitialized read in the C Predict API. If I construct a symbol and parameters file using the Python API as follows:
Then substitute the contents of the generated files into this C++ code. This causes an uninitialized read and fails the final assertion.
If instead I generate the symbol as follows the test passes:
I believe the API should reject symbols where an input name appears more than once. This seems to happen in other parts of the code. For example the following code fails with an assertion error:
This change makes the C Predict API reject such symbols. With this change the above C++ code fails on the first assertion.