Add nil checking for wrapperspb's types (#960)

* add nil checking for wrapperspb types
diff --git a/common/types/pb/type.go b/common/types/pb/type.go
index 6cc95c2..bdd474c 100644
--- a/common/types/pb/type.go
+++ b/common/types/pb/type.go
@@ -427,22 +427,49 @@
 			return structpb.NullValue_NULL_VALUE, true, nil
 		}
 	case *wrapperspb.BoolValue:
+		if v == nil {
+			return nil, true, nil
+		}
 		return v.GetValue(), true, nil
 	case *wrapperspb.BytesValue:
+		if v == nil {
+			return nil, true, nil
+		}
 		return v.GetValue(), true, nil
 	case *wrapperspb.DoubleValue:
+		if v == nil {
+			return nil, true, nil
+		}
 		return v.GetValue(), true, nil
 	case *wrapperspb.FloatValue:
+		if v == nil {
+			return nil, true, nil
+		}
 		return float64(v.GetValue()), true, nil
 	case *wrapperspb.Int32Value:
+		if v == nil {
+			return nil, true, nil
+		}
 		return int64(v.GetValue()), true, nil
 	case *wrapperspb.Int64Value:
+		if v == nil {
+			return nil, true, nil
+		}
 		return v.GetValue(), true, nil
 	case *wrapperspb.StringValue:
+		if v == nil {
+			return nil, true, nil
+		}
 		return v.GetValue(), true, nil
 	case *wrapperspb.UInt32Value:
+		if v == nil {
+			return nil, true, nil
+		}
 		return uint64(v.GetValue()), true, nil
 	case *wrapperspb.UInt64Value:
+		if v == nil {
+			return nil, true, nil
+		}
 		return v.GetValue(), true, nil
 	}
 	return msg, false, nil
diff --git a/common/types/pb/type_test.go b/common/types/pb/type_test.go
index 5aa36cb..6c7b8c8 100644
--- a/common/types/pb/type_test.go
+++ b/common/types/pb/type_test.go
@@ -355,38 +355,74 @@
 			out: true,
 		},
 		{
+			in:  (*wrapperspb.BoolValue)(nil),
+			out: nil,
+		},
+		{
 			in:  wrapperspb.Bytes([]byte("hello")),
 			out: []byte("hello"),
 		},
 		{
+			in:  (*wrapperspb.BytesValue)(nil),
+			out: nil,
+		},
+		{
 			in:  wrapperspb.Double(-4.2),
 			out: -4.2,
 		},
 		{
+			in:  (*wrapperspb.DoubleValue)(nil),
+			out: nil,
+		},
+		{
 			in:  wrapperspb.Float(4.5),
 			out: 4.5,
 		},
 		{
+			in:  (*wrapperspb.FloatValue)(nil),
+			out: nil,
+		},
+		{
 			in:  wrapperspb.Int32(123),
 			out: int64(123),
 		},
 		{
+			in:  (*wrapperspb.Int32Value)(nil),
+			out: nil,
+		},
+		{
 			in:  wrapperspb.Int64(456),
 			out: int64(456),
 		},
 		{
+			in:  (*wrapperspb.Int64Value)(nil),
+			out: nil,
+		},
+		{
 			in:  wrapperspb.String("goodbye"),
 			out: "goodbye",
 		},
 		{
+			in:  (*wrapperspb.StringValue)(nil),
+			out: nil,
+		},
+		{
 			in:  wrapperspb.UInt32(1234),
 			out: uint64(1234),
 		},
 		{
+			in:  (*wrapperspb.UInt32Value)(nil),
+			out: nil,
+		},
+		{
 			in:  wrapperspb.UInt64(5678),
 			out: uint64(5678),
 		},
 		{
+			in:  (*wrapperspb.UInt64Value)(nil),
+			out: nil,
+		},
+		{
 			in:  tpb.New(time.Unix(12345, 0).UTC()),
 			out: time.Unix(12345, 0).UTC(),
 		},
diff --git a/common/types/provider_test.go b/common/types/provider_test.go
index a2b2026..2576a57 100644
--- a/common/types/provider_test.go
+++ b/common/types/provider_test.go
@@ -695,22 +695,31 @@
 	// Wrapper conversion test.
 	expectNativeToValue(t, wrapperspb.Bool(true), True)
 	expectNativeToValue(t, &wrapperspb.BoolValue{}, False)
+	expectNativeToValue(t, (*wrapperspb.BoolValue)(nil), NullValue)
 	expectNativeToValue(t, &wrapperspb.BytesValue{}, Bytes{})
 	expectNativeToValue(t, wrapperspb.Bytes([]byte("hi")), Bytes("hi"))
+	expectNativeToValue(t, (*wrapperspb.BytesValue)(nil), NullValue)
 	expectNativeToValue(t, &wrapperspb.DoubleValue{}, Double(0.0))
 	expectNativeToValue(t, wrapperspb.Double(6.4), Double(6.4))
+	expectNativeToValue(t, (*wrapperspb.DoubleValue)(nil), NullValue)
 	expectNativeToValue(t, &wrapperspb.FloatValue{}, Double(0.0))
 	expectNativeToValue(t, wrapperspb.Float(3.0), Double(3.0))
+	expectNativeToValue(t, (*wrapperspb.FloatValue)(nil), NullValue)
 	expectNativeToValue(t, &wrapperspb.Int32Value{}, IntZero)
 	expectNativeToValue(t, wrapperspb.Int32(-32), Int(-32))
+	expectNativeToValue(t, (*wrapperspb.Int32Value)(nil), NullValue)
 	expectNativeToValue(t, &wrapperspb.Int64Value{}, IntZero)
 	expectNativeToValue(t, wrapperspb.Int64(-64), Int(-64))
+	expectNativeToValue(t, (*wrapperspb.Int64Value)(nil), NullValue)
 	expectNativeToValue(t, &wrapperspb.StringValue{}, String(""))
 	expectNativeToValue(t, wrapperspb.String("hello"), String("hello"))
+	expectNativeToValue(t, (*wrapperspb.StringValue)(nil), NullValue)
 	expectNativeToValue(t, &wrapperspb.UInt32Value{}, Uint(0))
 	expectNativeToValue(t, wrapperspb.UInt32(32), Uint(32))
+	expectNativeToValue(t, (*wrapperspb.UInt32Value)(nil), NullValue)
 	expectNativeToValue(t, &wrapperspb.UInt64Value{}, Uint(0))
 	expectNativeToValue(t, wrapperspb.UInt64(64), Uint(64))
+	expectNativeToValue(t, (*wrapperspb.UInt64Value)(nil), NullValue)
 }
 
 func TestNativeToValue_Primitive(t *testing.T) {