-
Notifications
You must be signed in to change notification settings - Fork 998
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a null-check for "DataGridView" property before executing OnMouseUp in function OnMouseUpInternal #12701
base: main
Are you sure you want to change the base?
Conversation
… function OnMouseUpInternal
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #12701 +/- ##
===================================================
+ Coverage 76.00638% 76.12895% +0.12257%
===================================================
Files 3181 3188 +7
Lines 639670 640106 +436
Branches 47215 47233 +18
===================================================
+ Hits 486190 487306 +1116
+ Misses 149968 149269 -699
- Partials 3512 3531 +19
Flags with carried forward coverage won't be shown. Click here to find out more. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for jumping on this issue! Looks good, I added only minor comments.
Could you please also review the rootcause PR for similar cases, for example other instances of invocations of user-provided event handlers that are followed by an access to the parent DGV?
src/System.Windows.Forms/src/System/Windows/Forms/Controls/DataGridView/DataGridViewCell.cs
Show resolved
Hide resolved
src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/DataGridViewCellTests.cs
Outdated
Show resolved
Hide resolved
src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/DataGridViewCellTests.cs
Outdated
Show resolved
Hide resolved
Will do that and share my findings once the review is complete. |
dataGridView.Columns.Add(column); | ||
var cell = (SubDataGridViewCheckBoxCell)dataGridView.Rows[0].Cells[0]; | ||
|
||
dataGridView.CellContentClick += new DataGridViewCellEventHandler((s, e) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One way to investigate if we have similar cases with other event handlers is to add unit tests like this one for different events.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From the root cause PR, other changes seem different from this situation?
For this case "calling other instances of the user-provided event handler and then accessing the parent DGV", the change of the event OnMouseUpInternal does meet this situation, but it only adds a judgment of
if (DataGridView is null)
{
return;
}
Do we also need to add a test similar to this?
src/System.Windows.Forms/src/System/Windows/Forms/Controls/DataGridView/DataGridViewCell.cs
Outdated
Show resolved
Hide resolved
src/System.Windows.Forms/src/System/Windows/Forms/Controls/DataGridView/DataGridViewCell.cs
Outdated
Show resolved
Hide resolved
@LeafShi1 - review is practically complete, the only remaining step is the investigation of similar cases. We would want to service all duplicates at once. |
Fixes #12692
Root Cause
OnMouseUp
in file DataGridViewCell.csProposed changes
DataGridView is not null
before executingOnMouseUp
in functionOnMouseUpInternal
, because the Parent DataGridView might have been disconnected in the user event handler that is executed before this call, for example if the user clears the DataGridView row.Customer Impact
Regression?
Risk
Screenshots
Before
Object reference not set to an instance of an object exception pops up after clicked the DataGridViewCell content when the function
DataGridView1_CellContentClick
contains contentDataGridView1.Rows.Clear();
DataGridView1.Rows.Add(1, 0, "ABCD");
After
DataGridView Rows can be cleaned and re-added normally
Test methodology
Test environment(s)
Microsoft Reviewers: Open in CodeFlow