@@ -9183,6 +9183,38 @@ prepare_assert_error(garray_T *gap)
91839183 ga_concat(gap, (char_u *)": ");
91849184}
91859185
9186+ /*
9187+ * Append "str" to "gap", escaping unprintable characters.
9188+ * Changes NL to \n, CR to \r, etc.
9189+ */
9190+ static void
9191+ ga_concat_esc(garray_T *gap, char_u *str)
9192+ {
9193+ char_u *p;
9194+ char_u buf[NUMBUFLEN];
9195+
9196+ for (p = str; *p != NUL; ++p)
9197+ switch (*p)
9198+ {
9199+ case BS: ga_concat(gap, (char_u *)"\\b"); break;
9200+ case ESC: ga_concat(gap, (char_u *)"\\e"); break;
9201+ case FF: ga_concat(gap, (char_u *)"\\f"); break;
9202+ case NL: ga_concat(gap, (char_u *)"\\n"); break;
9203+ case TAB: ga_concat(gap, (char_u *)"\\t"); break;
9204+ case CAR: ga_concat(gap, (char_u *)"\\r"); break;
9205+ case '\\': ga_concat(gap, (char_u *)"\\\\"); break;
9206+ default:
9207+ if (*p < ' ')
9208+ {
9209+ vim_snprintf((char *)buf, NUMBUFLEN, "\\x%02x", *p);
9210+ ga_concat(gap, buf);
9211+ }
9212+ else
9213+ ga_append(gap, *p);
9214+ break;
9215+ }
9216+ }
9217+
91869218/*
91879219 * Fill "gap" with information about an assert error.
91889220 */
@@ -9207,13 +9239,13 @@ fill_assert_error(
92079239 ga_concat(gap, (char_u *)"Expected ");
92089240 if (exp_str == NULL)
92099241 {
9210- ga_concat (gap, tv2string(exp_tv, &tofree, numbuf, 0));
9242+ ga_concat_esc (gap, tv2string(exp_tv, &tofree, numbuf, 0));
92119243 vim_free(tofree);
92129244 }
92139245 else
9214- ga_concat (gap, exp_str);
9246+ ga_concat_esc (gap, exp_str);
92159247 ga_concat(gap, (char_u *)" but got ");
9216- ga_concat (gap, tv2string(got_tv, &tofree, numbuf, 0));
9248+ ga_concat_esc (gap, tv2string(got_tv, &tofree, numbuf, 0));
92179249 vim_free(tofree);
92189250 }
92199251}
0 commit comments