updated for version 7.2b-023
diff --git a/src/eval.c b/src/eval.c
index fbc33dd..cb548d3 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1275,7 +1275,8 @@
 	if (dolist && tv.v_type == VAR_LIST)
 	{
 	    ga_init2(&ga, (int)sizeof(char), 80);
-	    list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0);
+	    if (tv.vval.v_list != NULL)
+		list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0);
 	    ga_append(&ga, NUL);
 	    retval = (char_u *)ga.ga_data;
 	}
@@ -1380,6 +1381,7 @@
 /*
  * Evaluate an expression to a list with suggestions.
  * For the "expr:" part of 'spellsuggest'.
+ * Returns NULL when there is an error.
  */
     list_T *
 eval_spell_expr(badword, expr)
@@ -1587,8 +1589,9 @@
 # endif
 
 /*
- * Call vimL function "func" and return the result as a list
+ * Call vimL function "func" and return the result as a List.
  * Uses argv[argc] for the function arguments.
+ * Returns NULL when there is something wrong.
  */
     void *
 call_func_retlist(func, argc, argv, safe)
@@ -5817,6 +5820,8 @@
 {
     listitem_T	*item1, *item2;
 
+    if (l1 == NULL || l2 == NULL)
+	return FALSE;
     if (l1 == l2)
 	return TRUE;
     if (list_len(l1) != list_len(l2))
@@ -5855,6 +5860,8 @@
     dictitem_T	*item2;
     int		todo;
 
+    if (d1 == NULL || d2 == NULL)
+	return FALSE;
     if (d1 == d2)
 	return TRUE;
     if (dict_len(d1) != dict_len(d2))
@@ -6243,6 +6250,9 @@
 {
     list_T	*l;
 
+    if (l1 == NULL || l2 == NULL)
+	return FAIL;
+
     /* make a copy of the first list. */
     l = list_copy(l1, FALSE, 0);
     if (l == NULL)
diff --git a/src/version.c b/src/version.c
index 0535785..e15aa43 100644
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    23,
+/**/
     22,
 /**/
     21,