diff --git a/mysql-test/r/func_test.result b/mysql-test/r/func_test.result
index 4bb2e067f9c3cff8cbf2592feaf65e094e2d0051..7d0a76424fecd0dcd71f47b945c32cefa87d2761 100644
--- a/mysql-test/r/func_test.result
+++ b/mysql-test/r/func_test.result
@@ -165,3 +165,9 @@ SELECT f_acc.rank, a1.rank, a2.rank  FROM t1 LEFT JOIN t1 f1 ON  (f1.access_id=1
 rank	rank	rank
 2	2	NULL
 DROP TABLE t1,t2;
+CREATE TABLE t1 (d varchar(6), k int);
+INSERT INTO t1 VALUES (NULL, 2);
+SELECT GREATEST(d,d) FROM t1 WHERE k=2;
+GREATEST(d,d)
+NULL
+DROP TABLE t1;
diff --git a/mysql-test/t/func_test.test b/mysql-test/t/func_test.test
index 1559fef7e6ef723a91920318b6cc25eaa554cb8c..0d055549866d4945fa8ec480b05595af8d90ef28 100644
--- a/mysql-test/t/func_test.test
+++ b/mysql-test/t/func_test.test
@@ -85,3 +85,11 @@ CREATE TABLE t2 (  access_id smallint(6) NOT NULL default '0',   name varchar(20
 INSERT INTO t2 VALUES (1,'Everyone',2),(2,'Help',3),(3,'Customer Support',1);
 SELECT f_acc.rank, a1.rank, a2.rank  FROM t1 LEFT JOIN t1 f1 ON  (f1.access_id=1 AND f1.faq_group_id = t1.faq_group_id) LEFT JOIN t2 a1 ON (a1.access_id =  f1.access_id) LEFT JOIN t1 f2 ON (f2.access_id=3 AND  f2.faq_group_id = t1.faq_group_id) LEFT  JOIN t2 a2 ON (a2.access_id = f2.access_id), t2 f_acc WHERE LEAST(a1.rank,a2.rank) =  f_acc.rank;
 DROP TABLE t1,t2;
+
+#
+# Test for GREATEST() and LEAST() bug, which segfaulted 4.1.1 server
+#
+CREATE TABLE t1 (d varchar(6), k int);
+INSERT INTO t1 VALUES (NULL, 2);
+SELECT GREATEST(d,d) FROM t1 WHERE k=2;
+DROP TABLE t1;
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 4c3db4b3373c26e858c68759f1da73b3870e2293..f90fcd5149e68d8f9b5b39d419bdfa305ddc8d40 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -1068,6 +1068,8 @@ String *Item_func_min_max::val_str(String *str)
 	}
       }
     }
+    if (!res)  // If NULL
+      return 0;
     res->set_charset(collation.collation);
     return res;
   }