diff --git a/mysql-test/r/cast.result b/mysql-test/r/cast.result
index c95c950e7e0..647c210b7d0 100644
--- a/mysql-test/r/cast.result
+++ b/mysql-test/r/cast.result
@@ -348,6 +348,10 @@ Warnings:
 Warning	1292	Truncated incorrect INTEGER value: '-1e+30'
 Warning	1292	Truncated incorrect INTEGER value: '1e+30'
 DROP TABLE t1;
+select isnull(date(NULL)), isnull(cast(NULL as DATE));
+isnull(date(NULL))	isnull(cast(NULL as DATE))
+1	1
+End of 4.1 tests
 select cast('1.2' as decimal(3,2));
 cast('1.2' as decimal(3,2))
 1.20
diff --git a/mysql-test/t/cast.test b/mysql-test/t/cast.test
index ed9fdfa087a..bc50d484a5f 100644
--- a/mysql-test/t/cast.test
+++ b/mysql-test/t/cast.test
@@ -176,7 +176,13 @@ INSERT INTO t1 SET f1 = +1.0e+30 ;
 SELECT f1 AS double_val, CAST(f1 AS SIGNED INT) AS cast_val FROM t1;
 DROP TABLE t1;					   
 
-# End of 4.1 tests
+#
+# Bug #23938: cast(NULL as DATE)
+#
+
+select isnull(date(NULL)), isnull(cast(NULL as DATE));
+
+--echo End of 4.1 tests
 
 
 #decimal-related additions
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 44d9a063e7a..4396763ebeb 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -2542,7 +2542,10 @@ longlong Item_date_typecast::val_int()
   DBUG_ASSERT(fixed == 1);
   TIME ltime;
   if (args[0]->get_date(&ltime, TIME_FUZZY_DATE))
+  {
+    null_value= 1;
     return 0;
+  }
   return (longlong) (ltime.year * 10000L + ltime.month * 100 + ltime.day);
 }