diff --git a/src/conio/cterm.c b/src/conio/cterm.c
index ccda29efda2e5764c98dc6c6e9637a7022d07eab..664f4f52da57dd6cc8aab2c35819378261d98110 100644
--- a/src/conio/cterm.c
+++ b/src/conio/cterm.c
@@ -4752,22 +4752,6 @@ CIOLIBEXPORT char* CIOLIBCALL cterm_write(struct cterminal * cterm, const void *
 							else {
 								if (cterm->strbuf) {
 									cterm->strbuf[cterm->strbuflen++] = ch[0];
-									switch(cterm->sixel) {
-										case SIXEL_STARTED:
-											parse_sixel_string(cterm, false);
-											break;
-										case SIXEL_POSSIBLE:
-											parse_sixel_intro(cterm);
-											break;
-									}
-									switch(cterm->macro) {
-										case MACRO_STARTED:
-											parse_macro_string(cterm, false);
-											break;
-										case MACRO_POSSIBLE:
-											parse_macro_intro(cterm);
-											break;
-									}
 									if (cterm->strbuflen == cterm->strbufsize) {
 										char *p;
 
@@ -4786,6 +4770,23 @@ CIOLIBEXPORT char* CIOLIBCALL cterm_write(struct cterminal * cterm, const void *
 												cterm->strbuf = p;
 										}
 									}
+									cterm->strbuf[cterm->strbuflen] = 0;
+									switch(cterm->sixel) {
+										case SIXEL_STARTED:
+											parse_sixel_string(cterm, false);
+											break;
+										case SIXEL_POSSIBLE:
+											parse_sixel_intro(cterm);
+											break;
+									}
+									switch(cterm->macro) {
+										case MACRO_STARTED:
+											parse_macro_string(cterm, false);
+											break;
+										case MACRO_POSSIBLE:
+											parse_macro_intro(cterm);
+											break;
+									}
 								}
 							}
 							break;
@@ -4830,6 +4831,7 @@ CIOLIBEXPORT char* CIOLIBCALL cterm_write(struct cterminal * cterm, const void *
 												cterm->strbuf = p;
 										}
 									}
+									cterm->strbuf[cterm->strbuflen] = 0;
 								}
 							}
 							break;