lib/icc: Always close profile when loading fails #150
Merged
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.
cd_icc_load() always takes ownership of the passed profile, but will leak it if the initial condition fails and the funtion returns an error. Only if the actual profile loading fails, will the passed profile eventually not be leaked. Fix this by closing it immediately in the first case.
This might not be a good solution, but the API doesn't allow the caller to close the profile after calling the load function, so we need something to not leak here. The alternative is to always set the internal pointer to have it closed on finalization; that would avoid any user-after-free if the caller makes the assumption that the profiles is still valid (which might not be that far fetched since the API mentions it's kept around until finalize).
Another alternative is to treat it as a programming error to not have context ID (but I guess still set an error), and still leak in that case.