diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result
index 5084498c01c858dd67fbdd161c4b2cab62d5f8ec..eb93c69d960c68d3414c9322605e1bb0be1f6a3c 100644
--- a/mysql-test/r/delete.result
+++ b/mysql-test/r/delete.result
@@ -271,3 +271,11 @@ a
 DROP TABLE t1, t2;
 DROP DATABASE db1;
 DROP DATABASE db2;
+CREATE FUNCTION f1() RETURNS INT RETURN 1;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (0);
+DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
+ERROR 42000: Incorrect number of arguments for FUNCTION test.f1; expected 0, got 1
+DROP TABLE t1;
+DROP FUNCTION f1;
+End of 5.0 tests
diff --git a/mysql-test/t/delete.test b/mysql-test/t/delete.test
index 8a03cb6c715272dc9f3e24f1153d02650aca61bf..602e30687c8547f2354b74fad6125ce15812456b 100644
--- a/mysql-test/t/delete.test
+++ b/mysql-test/t/delete.test
@@ -277,3 +277,18 @@ SELECT * FROM t1;
 DROP TABLE t1, t2;
 DROP DATABASE db1;
 DROP DATABASE db2;
+
+#
+# Bug 31742: delete from ... order by function call that causes an error, 
+#            asserts server
+#
+
+CREATE FUNCTION f1() RETURNS INT RETURN 1;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (0);
+--error 1318
+DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
+DROP TABLE t1;
+DROP FUNCTION f1;
+
+--echo End of 5.0 tests
diff --git a/sql/filesort.cc b/sql/filesort.cc
index b6a5d844eac36e4b16332bbe6e3f10ad15e8f465..c074f90e7800c45cdb813c82c6649b4fb0c47526 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -556,7 +556,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
       file->unlock_row();
     /* It does not make sense to read more keys in case of a fatal error */
     if (thd->net.report_error)
-      DBUG_RETURN(HA_POS_ERROR);
+      break;
   }
   if (quick_select)
   {
@@ -573,6 +573,9 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
       file->ha_rnd_end();
   }
 
+  if (thd->net.report_error)
+    DBUG_RETURN(HA_POS_ERROR);
+  
   /* Signal we should use orignal column read and write maps */
   sort_form->column_bitmaps_set(save_read_set, save_write_set);