diff --git a/mysql-test/r/udf.result b/mysql-test/r/udf.result
index be52fd7f87cf89fcaf7f55a729d7213534e85841..484c42c41bf6177cac9636339bb5c9ad689695a2 100644
--- a/mysql-test/r/udf.result
+++ b/mysql-test/r/udf.result
@@ -76,6 +76,24 @@ call XXX2();
 metaphon(testval)
 HL
 drop procedure xxx2;
+CREATE TABLE bug19904(n INT, v varchar(10));
+INSERT INTO bug19904 VALUES (1,'one'),(2,'two'),(NULL,NULL),(3,'three'),(4,'four');
+SELECT myfunc_double(n) AS f FROM bug19904;
+f
+49.00
+50.00
+NULL
+51.00
+52.00
+SELECT metaphon(v) AS f FROM bug19904;
+f
+ON
+TW
+NULL
+0R
+FR
+DROP TABLE bug19904;
+End of 5.0 tests.
 DROP FUNCTION metaphon;
 DROP FUNCTION myfunc_double;
 DROP FUNCTION myfunc_nonexist;
diff --git a/mysql-test/t/udf.test b/mysql-test/t/udf.test
index e2556692612e2193f91fbd0bc9b9d303388010ea..f3be08c8537005bcd04bd417d0f44ac376a96800 100644
--- a/mysql-test/t/udf.test
+++ b/mysql-test/t/udf.test
@@ -99,6 +99,17 @@ delimiter ;//
 call XXX2();
 drop procedure xxx2;
 
+#
+# Bug#19904: UDF: not initialized *is_null per row
+#
+
+CREATE TABLE bug19904(n INT, v varchar(10));
+INSERT INTO bug19904 VALUES (1,'one'),(2,'two'),(NULL,NULL),(3,'three'),(4,'four');
+SELECT myfunc_double(n) AS f FROM bug19904;
+SELECT metaphon(v) AS f FROM bug19904;
+DROP TABLE bug19904;
+
+--echo End of 5.0 tests.
 
 #
 # Drop the example functions from udf_example
@@ -114,3 +125,4 @@ DROP FUNCTION lookup;
 DROP FUNCTION reverse_lookup;
 DROP FUNCTION avgcost;
 
+
diff --git a/sql/sql_udf.h b/sql/sql_udf.h
index d588572a7623b1d9213b91cecc7d21763f1b7c63..d0729deecaa381adeabe4f637633f4f040dbf111 100644
--- a/sql/sql_udf.h
+++ b/sql/sql_udf.h
@@ -70,6 +70,7 @@ class udf_handler :public Sql_alloc
   void cleanup();
   double val(my_bool *null_value)
   {
+    is_null= 0;
     if (get_arguments())
     {
       *null_value=1;
@@ -88,6 +89,7 @@ class udf_handler :public Sql_alloc
   }
   longlong val_int(my_bool *null_value)
   {
+    is_null= 0;
     if (get_arguments())
     {
       *null_value=1;