diff --git a/src/conio/cterm.c b/src/conio/cterm.c
index d3a69db74f7df326aab46e28e27636bf61db0f89..780f820819fbe9bacdc4eeb744cc7fafd94357d2 100644
--- a/src/conio/cterm.c
+++ b/src/conio/cterm.c
@@ -2655,12 +2655,20 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
 				cterm->strbuf[cterm->strbuflen] = 0;
 			}
 			switch (cterm->string) {
+				case CTERM_STRING_APC:
+					if (cterm->apc_handler)
+						cterm->apc_handler(cterm->strbuf, cterm->strbuflen, cterm->apc_handler_data);
+					break;
 				case CTERM_STRING_DCS:
 					if (cterm->sixel == SIXEL_STARTED)
 						parse_sixel_string(cterm, true);
 					else {
 						if (strncmp(cterm->strbuf, "CTerm:Font:", 11) == 0) {
 							cterm->font_slot = strtoul(cterm->strbuf+11, &p, 10);
+							if(cterm->font_slot < CONIO_FIRST_FREE_FONT)
+								break;
+							if (cterm->font_slot > 255)
+								break;
 							if (p && *p == ':') {
 								p++;
 								i = b64_decode(cterm->fontbuf, sizeof(cterm->fontbuf), p, 0);
@@ -3263,7 +3271,7 @@ CIOLIBEXPORT char* CIOLIBCALL cterm_write(struct cterminal * cterm, const void *
 
 						if((buf2=(char *)malloc(cterm->font_size))!=NULL) {
 							memcpy(buf2,cterm->fontbuf,cterm->font_size);
-							if(cterm->font_slot >= CONIO_FIRST_FREE_FONT) {
+							if(cterm->font_slot >= CONIO_FIRST_FREE_FONT && cterm->font_slot < 256) {
 								switch(cterm->font_size) {
 									case 4096:
 										FREE_AND_NULL(conio_fontdata[cterm->font_slot].eight_by_sixteen);
diff --git a/src/conio/cterm.h b/src/conio/cterm.h
index a745d500e64ebead3275445b8ab67c3607baef1d..f4131421e935d5d5f8dc86b3b690648f6d5cdee8 100644
--- a/src/conio/cterm.h
+++ b/src/conio/cterm.h
@@ -177,6 +177,10 @@ struct cterminal {
 	uint8_t				*sx_mask;
 	int					sx_orig_cursor;	// Original value of cterm->cursor
 
+	/* APC Handler */
+	void				(*apc_handler)(char *strbuf, size_t strlen, void *cbdata);
+	void				*apc_handler_data;
+
 	/* conio function pointers */
 #ifdef CTERM_WITHOUT_CONIO
 	void	(*ciolib_gotoxy)		(struct cterminal *,int,int);