Skip to content

cmp: guard AllowUnexported against nil arguments - #405

Open
rootkiller6788 wants to merge 2 commits into
google:masterfrom
rootkiller6788:fix-allowunexported-nil-check
Open

rootkiller6788 wants to merge 2 commits into
google:masterfrom
rootkiller6788:fix-allowunexported-nil-check

Conversation

@rootkiller6788

Copy link
Copy Markdown

AllowUnexported is the one option constructor that didn't handle a bare nil. cmp.AllowUnexported(nil) used to die with a runtime nil pointer dereference ("invalid memory address or nil pointer dereference") deep inside reflect.Type.Kind, instead of the "invalid struct type: " panic that every other invalid input already gets. cmpopts.IgnoreTypes and friends nil-check in exactly this spot.

The change adds the missing t == nil check to the existing guard in AllowUnexported, and a small regression test covers the nil case.

One test note: TestOptionPanic can't reach this input because it invokes the option functions through reflection, which has no way to represent a bare nil argument. So the new test calls AllowUnexported(nil) directly and checks the panic message.

Passing a bare nil to AllowUnexported used to panic with a runtime nil
pointer dereference from reflect.Type.Kind, instead of the descriptive
"invalid struct type" panic every other invalid input gets. Check for a
nil type before reading its kind, like cmpopts does in the same situation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant