diff -ur bash-4.3.30.dist/builtins/echo.def bash-4.3.30/builtins/echo.def
--- bash-4.3.30.dist/builtins/echo.def	2011-06-29 09:55:58.000000000 -0400
+++ bash-4.3.30/builtins/echo.def	2016-06-03 17:40:57.834915855 -0400
@@ -108,8 +108,10 @@
 echo_builtin (list)
      WORD_LIST *list;
 {
-  int display_return, do_v9, i, len;
-  char *temp, *s;
+  int display_return, do_v9, i, j, len, malloc_len;
+  char *temp, *s, *m;
+  WORD_LIST *save_list;
+  ssize_t ret;
 
   do_v9 = xpg_echo;
   display_return = 1;
@@ -162,6 +164,30 @@
   clearerr (stdout);	/* clear error before writing and testing success */
 
   terminate_immediately++;
+  malloc_len = 0;
+  m = NULL;
+  save_list = list;
+  while (list)
+    {
+      i = len = 0;
+      temp = do_v9 ? ansicstr (list->word->word, STRLEN (list->word->word), 1, &i, &len)
+		   : list->word->word;
+      if (!temp)
+        continue;
+      malloc_len += do_v9 ? len : strlen(temp);
+      if (do_v9)
+	free (temp);
+      list = list->next;
+      if (list)
+        malloc_len++;
+    }
+  if (display_return)
+    malloc_len++;
+  m = malloc(malloc_len);
+  if (m == NULL)
+    fatal_error ("echo: could not allocate %lu bytes", (unsigned long)malloc_len);
+  list = save_list;
+  j = 0;
   while (list)
     {
       i = len = 0;
@@ -169,19 +195,13 @@
 		   : list->word->word;
       if (temp)
 	{
-	  if (do_v9)
-	    {
-	      for (s = temp; len > 0; len--)
-		putchar (*s++);
-	    }
-	  else	    
-	    printf ("%s", temp);
-#if defined (SunOS5)
-	  fflush (stdout);	/* Fix for bug in SunOS 5.5 printf(3) */
-#endif
+	  if (!do_v9)
+              len = strlen(temp);
+          memmove(m + j, temp, len);
+          j += len;
+          if (do_v9)
+            free (temp);
 	}
-      if (do_v9 && temp)
-	free (temp);
       list = list->next;
       if (i)
 	{
@@ -189,11 +209,17 @@
 	  break;
 	}
       if (list)
-	putchar(' ');
+	m[j++] = ' ';
     }
-
   if (display_return)
-    putchar ('\n');
+    m[j++] = '\n';
+  ret = write(STDOUT_FILENO, m, j);
+  if (ret < j)
+    sh_wrerror();
+  free(m);
+#if defined (SunOS5)
+  fflush (stdout);	/* Fix for bug in SunOS 5.5 printf(3) */
+#endif
 
   terminate_immediately--;
   return (sh_chkwrite (EXECUTION_SUCCESS));
