ref: 0836f67d429d2f545f43e203023d174ca4442779
parent: 176a57a1e96c53513b82b093b105bb9b4f92da6c
parent: 6767d11c23a15f1085ff203c94a6fa0b60aa4352
author: Eldred Habert <eldredhabert0@gmail.com>
date: Sun Oct 11 21:49:57 EDT 2020
Merge pull request #601 from NieDzejkob/utf8decoder utf8decoder: Use byte-sized byte argument
--- a/include/extern/utf8decoder.h
+++ b/include/extern/utf8decoder.h
@@ -9,6 +9,6 @@
#ifndef EXTERN_UTF8DECODER_H
#define EXTERN_UTF8DECODER_H
-uint32_t decode(uint32_t *state, uint32_t *codep, uint32_t byte);
+uint32_t decode(uint32_t *state, uint32_t *codep, uint8_t byte);
#endif /* EXTERN_UTF8DECODER_H */
--- a/src/asm/parser.y
+++ b/src/asm/parser.y
@@ -61,7 +61,7 @@
uint32_t codep = 0;
while (*s) {
- switch (decode(&state, &codep, (uint8_t)*s)) {
+ switch (decode(&state, &codep, *s)) {
case 1:
fatalerror("STRLEN: Invalid UTF-8 character\n");
break;
@@ -95,7 +95,7 @@
/* Advance to starting position in source string. */
while (src[srcIndex] && curPos < pos) {
- switch (decode(&state, &codep, (uint8_t)src[srcIndex])) {
+ switch (decode(&state, &codep, src[srcIndex])) {
case 1:
fatalerror("STRSUB: Invalid UTF-8 character\n");
break;
@@ -113,7 +113,7 @@
/* Copy from source to destination. */
while (src[srcIndex] && destIndex < MAXSTRLEN && curLen < len) {
- switch (decode(&state, &codep, (uint8_t)src[srcIndex])) {
+ switch (decode(&state, &codep, src[srcIndex])) {
case 1:
fatalerror("STRSUB: Invalid UTF-8 character\n");
break;
--- a/src/asm/util.c
+++ b/src/asm/util.c
@@ -69,7 +69,7 @@
size_t i = 0;
for (;;) {
- if (decode(&state, &codep, (uint8_t)src[i]) == 1)
+ if (decode(&state, &codep, src[i]) == 1)
fatalerror("invalid UTF-8 character\n");
dest[i] = src[i];
--- a/src/extern/utf8decoder.c
+++ b/src/extern/utf8decoder.c
@@ -38,7 +38,7 @@
1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* s8 */
};
-uint32_t decode(uint32_t *state, uint32_t *codep, uint32_t byte)
+uint32_t decode(uint32_t *state, uint32_t *codep, uint8_t byte)
{
uint32_t type = utf8d[byte];
--- /dev/null
+++ b/test/asm/invalid-utf-8.asm
@@ -1,0 +1,5 @@
+; This test tries to pass invalid UTF-8 through a macro argument
+; to exercise the lexer's reportGarbageChar
+m:MACRO \1
+ENDM
+ m ��
--- /dev/null
+++ b/test/asm/invalid-utf-8.err
@@ -1,0 +1,5 @@
+ERROR: invalid-utf-8.asm(4) -> invalid-utf-8.asm::m(3):
+ Unknown character 0xCF
+ERROR: invalid-utf-8.asm(4) -> invalid-utf-8.asm::m(3):
+ Unknown character 0xD3
+error: Assembly aborted (2 errors)!