diff --git a/sql/slave.cc b/sql/slave.cc
index d2c5b4fd254..2e8e3f582de 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -27,6 +27,7 @@
 #include <my_dir.h>
 #include <sql_common.h>
 #include <errmsg.h>
+#include <mysys_err.h>
 
 #ifdef HAVE_REPLICATION
 
@@ -2204,20 +2205,23 @@ reading event"))
       if (event_len == packet_error)
       {
         uint mysql_error_number= mysql_errno(mysql);
-        if (mysql_error_number == CR_NET_PACKET_TOO_LARGE)
-        {
+        switch (mysql_error_number) {
+        case CR_NET_PACKET_TOO_LARGE:
           sql_print_error("\
 Log entry on master is longer than max_allowed_packet (%ld) on \
 slave. If the entry is correct, restart the server with a higher value of \
 max_allowed_packet",
                           thd->variables.max_allowed_packet);
           goto err;
-        }
-        if (mysql_error_number == ER_MASTER_FATAL_ERROR_READING_BINLOG)
-        {
+        case ER_MASTER_FATAL_ERROR_READING_BINLOG:
           sql_print_error(ER(mysql_error_number), mysql_error_number,
                           mysql_error(mysql));
           goto err;
+        case EE_OUTOFMEMORY:
+        case ER_OUTOFMEMORY:
+          sql_print_error("\
+Stopping slave I/O thread due to out-of-memory error from master");
+          goto err;
         }
         if (try_to_reconnect(thd, mysql, mi, &retry_count, suppress_warnings,
                              reconnect_messages[SLAVE_RECON_ACT_EVENT]))