RingBuffer with a size of 1 should not be allowed due to an insert bug, so increment a size of one, by one.#218
Open
hedisam wants to merge 1 commit intoWorkiva:masterfrom
Open
Conversation
… 1 due to occuring replacements having a full queue with a size of one
Security InsightsNo security relevant content was detected by automated scans. Action Items
Questions or Comments? Reach out on Slack: #support-infosec. |
Author
|
You can see the bug in action by running this unit test: |
| // single item in the ring buffer gets replaced with every insert operation which also makes | ||
| // rb.Get() to block since the ring buffer's state becomes invalid despite having a full queue. | ||
| size = 2 | ||
| } |
Collaborator
There was a problem hiding this comment.
Very interesting. You have found a bug in the roundUp method that occurs when size <= 1. I propose that we fix that method instead. I also see that it is copied in a few different places so we should move it to a single location.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
RingBuffer with a size of 1 will have a mask of 0 which uncovers a bug in the algorithm since the mask value must only contain ones (left padded with zeros) if it's represented in its binary format (e.g. '0111', '0011 1111', etc.). So we should not allow having RingBuffer queues with a size of 1. We can simply fix this by incrementing the size inside the RingBuffer's init method.
With a full RingBuffer of size 1, insert operations replace the existing item in the queue and then puts the RingBuffer into an invalid state.