shithub: rgbds

Download patch

ref: 0d9de01f9dfb15198174f4f7eab209f00da9c7f9
parent: f5b0eae9cd6adf3e79fc20c8f412216c7c95716e
author: ISSOtm <eldredhabert0@gmail.com>
date: Sat Dec 12 09:16:50 EST 2020

Make charmap-converting a non-UTF8 string non-fatal

--- a/include/asm/util.h
+++ b/include/asm/util.h
@@ -13,6 +13,9 @@
 
 uint32_t calchash(const char *s);
 char const *print(int c);
+/*
+ * @return The number of bytes read, or 0 if invalid data was found
+ */
 size_t readUTF8Char(uint8_t *dest, char const *src);
 
 #endif /* RGBDS_UTIL_H */
--- a/src/asm/charmap.c
+++ b/src/asm/charmap.c
@@ -229,6 +229,10 @@
 			} else if (*input) { /* No match found */
 				size_t codepointLen = readUTF8Char(output, input);
 
+				if (codepointLen == 0) {
+					error("Input string is not valid UTF-8!");
+					break;
+				}
 				input += codepointLen; /* OK because UTF-8 has no NUL in multi-byte chars */
 				output += codepointLen;
 				outputLen += codepointLen;
--- a/src/asm/util.c
+++ b/src/asm/util.c
@@ -70,7 +70,7 @@
 
 	for (;;) {
 		if (decode(&state, &codep, src[i]) == 1)
-			fatalerror("invalid UTF-8 character\n");
+			return 0;
 
 		dest[i] = src[i];
 		i++;