fixed:panic when create value from nil struct pointer. (#4771)
* fixed:create nil pointer * fixed:panic when create value from nil struct pointer.
This commit is contained in:
		
							parent
							
								
									418c60c83c
								
							
						
					
					
						commit
						ec58e3319f
					
				| @ -77,7 +77,12 @@ func Parse(dest interface{}, cacheStore *sync.Map, namer Namer) (*Schema, error) | |||||||
| 		return nil, fmt.Errorf("%w: %+v", ErrUnsupportedDataType, dest) | 		return nil, fmt.Errorf("%w: %+v", ErrUnsupportedDataType, dest) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	modelType := reflect.Indirect(reflect.ValueOf(dest)).Type() | 	value := reflect.ValueOf(dest) | ||||||
|  | 	if value.Kind() == reflect.Ptr && value.IsNil() { | ||||||
|  | 		value = reflect.New(value.Type().Elem()) | ||||||
|  | 	} | ||||||
|  | 	modelType := reflect.Indirect(value).Type() | ||||||
|  | 
 | ||||||
| 	if modelType.Kind() == reflect.Interface { | 	if modelType.Kind() == reflect.Interface { | ||||||
| 		modelType = reflect.Indirect(reflect.ValueOf(dest)).Elem().Type() | 		modelType = reflect.Indirect(reflect.ValueOf(dest)).Elem().Type() | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -517,3 +517,12 @@ func TestCreateFromSubQuery(t *testing.T) { | |||||||
| 		t.Errorf("invalid insert SQL, got %v", result.Statement.SQL.String()) | 		t.Errorf("invalid insert SQL, got %v", result.Statement.SQL.String()) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestCreateNilPointer(t *testing.T) { | ||||||
|  | 	var user *User | ||||||
|  | 
 | ||||||
|  | 	err := DB.Create(user).Error | ||||||
|  | 	if err == nil || err != gorm.ErrInvalidValue { | ||||||
|  | 		t.Fatalf("it is not ErrInvalidValue") | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 kinggo
						kinggo