When the input is nil, don't set the zero value
diff --git a/mapstructure.go b/mapstructure.go
index 7b4b125..e7765be 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -131,6 +131,11 @@
 
 // Decodes an unknown data type into a specific reflection value.
 func (d *Decoder) decode(name string, data interface{}, val reflect.Value) error {
+	if data == nil {
+		// If the data is nil, then we don't set anything.
+		return nil
+	}
+
 	dataVal := reflect.ValueOf(data)
 	if !dataVal.IsValid() {
 		// If the data value is invalid, then we just set the value
diff --git a/mapstructure_test.go b/mapstructure_test.go
index de2374c..3ac1dda 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -2,6 +2,7 @@
 
 import (
 	"reflect"
+	"sort"
 	"testing"
 )
 
@@ -195,6 +196,24 @@
 	}
 }
 
+func TestDecode_Nil(t *testing.T) {
+	t.Parallel()
+
+	var input interface{} = nil
+	result := Basic{
+		Vstring: "foo",
+	}
+
+	err := Decode(input, &result)
+	if err != nil {
+		t.Fatalf("err: %s", err)
+	}
+
+	if result.Vstring != "foo" {
+		t.Fatalf("bad: %#v", result.Vstring)
+	}
+}
+
 func TestDecode_NonStruct(t *testing.T) {
 	t.Parallel()
 
@@ -625,7 +644,9 @@
 		t.Fatalf("err: %s", err.Error())
 	}
 
-	expectedKeys := []string{"Vunique", "Vstring"}
+	expectedKeys := []string{"Vstring", "Vunique"}
+
+	sort.Strings(md.Keys)
 	if !reflect.DeepEqual(md.Keys, expectedKeys) {
 		t.Fatalf("bad keys: %#v", md.Keys)
 	}