If data is zero type, decodeBasic should set the zero value
diff --git a/mapstructure.go b/mapstructure.go
index 9ef46c9..7533b2c 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -90,8 +90,9 @@
 func decodeBasic(name string, data interface{}, val reflect.Value) error {
 	dataVal := reflect.ValueOf(data)
 	if !dataVal.IsValid() {
-		// This should never happen because upstream makes sure it is valid
-		panic("data is invalid")
+		// If the data isn't valid (the zero type), then we set the
+		// value to be the zero type of the field we want to set.
+		dataVal = reflect.Zero(val.Type())
 	}
 
 	dataValType := dataVal.Type()
diff --git a/mapstructure_bugs_test.go b/mapstructure_bugs_test.go
new file mode 100644
index 0000000..28a4940
--- /dev/null
+++ b/mapstructure_bugs_test.go
@@ -0,0 +1,21 @@
+package mapstructure
+
+import "testing"
+
+// GH-1
+func TestDecode_NilValue(t *testing.T) {
+	input := map[string]interface{}{
+		"vstring": nil,
+	}
+
+	var result Basic
+	err := Decode(input, &result)
+	if err != nil {
+		t.Fatalf("should not error: %s", err)
+	}
+
+	if result.Vstring != "" {
+		t.Fatalf("value should be default: %s", result.Vstring)
+	}
+}
+