[release/9.0] fix guid version > 7 #108351
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.
Backport of #108314 to release/9.0
/cc @tannergooding @kasperk81
Customer Impact
#108267 - Manually creating a GUID where the version is 8 higher will result in an incorrect value being returned.
Regression
No, this is a net new API in .NET 9
Testing
Explicit validation tests were added. The issue is due to the implicit sign extension that exists. That is, because the underlying field is
short
and because C# doesn't operate directly on "small" integer types in many scenarios, it implicitly sign extends up toint
before the unsigned right shift would occur.Thus, the code
_c >>> 12
could return an incorrect value as-32768
would change from0x8000
to0xFFFF_8000
and would become0x000F_FFF8
, rather than0x8
, with similar results happening for any value in the range[-1, -32768]
.Risk
Low. This is a net new API in .NET 9.