More work on entity conversion

This commit is contained in:
Kovid Goyal 2024-09-12 19:53:28 +05:30
parent 858f047b78
commit 741ddaadb8
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -9,8 +9,6 @@
#define UNICODE #define UNICODE
#define _UNICODE #define _UNICODE
#include <Python.h> #include <Python.h>
#include <frozen/unordered_map.h>
#include <frozen/string.h>
#include "../utils/cpp_binding.h" #include "../utils/cpp_binding.h"
unsigned int unsigned int
@ -58,11 +56,11 @@ bad_entity:
return ans; return ans;
} }
memcpy(e, entity, elen); memcpy(e, entity, elen);
unsigned long codepoint = ULONG_MAX;
e[elen] = 0; e[elen] = 0;
if (e[0] == '#') { if (e[0] == '#') {
if (elen > 1) { if (elen < 2) goto bad_entity;
char *end; char *end;
unsigned long codepoint = ULONG_MAX;
if (e[1] == 'x' || e[1] == 'X') { if (e[1] == 'x' || e[1] == 'X') {
errno = 0; errno = 0;
codepoint = strtoul(e + 2, &end, 16); codepoint = strtoul(e + 2, &end, 16);
@ -72,12 +70,12 @@ bad_entity:
codepoint = strtoul(e + 1, &end, 10); codepoint = strtoul(e + 1, &end, 10);
if (errno || *end) goto bad_entity; if (errno || *end) goto bad_entity;
} }
if (codepoint <= 1114111ul) return encode_utf8(codepoint, output); unsigned num = encode_utf8(codepoint, output);
} if (!num) goto bad_entity;
return num;
} else { } else {
} }
goto bad_entity;
return 0;
} }