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,26 +56,26 @@ 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;
if (e[1] == 'x' || e[1] == 'X') { unsigned long codepoint = ULONG_MAX;
errno = 0; if (e[1] == 'x' || e[1] == 'X') {
codepoint = strtoul(e + 2, &end, 16); errno = 0;
if (errno || *end) goto bad_entity; codepoint = strtoul(e + 2, &end, 16);
} else { if (errno || *end) goto bad_entity;
errno = 0; } else {
codepoint = strtoul(e + 1, &end, 10); errno = 0;
if (errno || *end) goto bad_entity; codepoint = strtoul(e + 1, &end, 10);
} 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;
} }