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++;