bug causing out-of-bounds memory access in AddUpdated when updating cached row status #151
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.
bug causing out-of-bounds memory access in
AddUpdated()when updating cached row status.In the
else if (upd_idx >= 0)branch at line 2691, the code updatesres->updated_keyset[upd_idx].statusbut then incorrectly accessesres->added_tuples + num_fields * upd_add_idxto clear cached data.When a row's status in the
updated_keysetarray is modified, the corresponding cached tuple data must be invalidated.The invariant is: for any index
i, the tuple cache entry is stored atbase_array + num_fields * i. Since we're modifyingupdated_keyset[upd_idx], the corresponding tuple cache is atupdated_tuples + num_fields * upd_idx.Using the wrong base array (
added_tuples) or wrong index (upd_add_idx = -1) violates this and produces undefined behavior.Fix