summaryrefslogtreecommitdiff
path: root/sax/src/guessing_decoder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sax/src/guessing_decoder.cc')
-rw-r--r--sax/src/guessing_decoder.cc26
1 files changed, 13 insertions, 13 deletions
diff --git a/sax/src/guessing_decoder.cc b/sax/src/guessing_decoder.cc
index e72dab3..0e3b628 100644
--- a/sax/src/guessing_decoder.cc
+++ b/sax/src/guessing_decoder.cc
@@ -18,7 +18,7 @@ bool eq(std::span<uint8_t const> a, std::size_t& a_offset, std::string_view b) {
if (a.size() - a_offset < b.size())
return false;
for (size_t i = 0; i < b.size(); ++i)
- if (a[a_offset + i] != b[i])
+ if (a[a_offset + i] != static_cast<uint8_t>(b[i]))
return false;
return true;
}
@@ -32,37 +32,37 @@ class GuessingDecoder : public Decoder {
if (!decided_) {
if (eq(in, in_offset, "\xef\xbb\xbf"sv)) {
decided_ = create_utf8_decoder();
- } else if (eq(in, in_offset, "\xfe\xff\x00\x00"sv)) {
+ } else if (eq(in, in_offset, "\xff\xfe\x00\x00"sv)) {
in_offset += 4;
- decided_ = create_utf32be_decoder();
- } else if (eq(in, in_offset, "\xfe\xff"sv)) {
+ decided_ = create_utf32le_decoder();
+ } else if (eq(in, in_offset, "\xff\xfe"sv)) {
// Could be UTF-32 BOM, need more data to decide
// (note, an xml document encoded in UTF-16 that is less than 4 bytes
// is rather impossible).
if (in.size() - in_offset < 4)
return State::NEED_MORE;
in_offset += 2;
- decided_ = create_utf16be_decoder();
- } else if (eq(in, in_offset, "\xff\xfe"sv)) {
- in_offset += 2;
decided_ = create_utf16le_decoder();
- } else if (eq(in, in_offset, "\x00\x00\xff\xfe"sv)) {
+ } else if (eq(in, in_offset, "\xfe\xff"sv)) {
+ in_offset += 2;
+ decided_ = create_utf16be_decoder();
+ } else if (eq(in, in_offset, "\x00\x00\xfe\xff"sv)) {
in_offset += 4;
- decided_ = create_utf32le_decoder();
+ decided_ = create_utf32be_decoder();
} else {
auto avail = in.size() - in_offset;
if (avail == 0)
return State::NEED_MORE;
if (avail >= 4 && in[in_offset] == 0 && in[in_offset + 1] == 0
&& in[in_offset + 2] == 0 && in[in_offset + 3] != 0) {
- decided_ = create_utf32le_decoder();
+ decided_ = create_utf32be_decoder();
} else if (avail >= 4 && in[in_offset] != 0 && in[in_offset + 1] == 0
&& in[in_offset + 2] == 0 && in[in_offset + 3] == 0) {
- decided_ = create_utf32be_decoder();
+ decided_ = create_utf32le_decoder();
} else if (avail >= 2 && in[in_offset] == 0 && in[in_offset + 1] != 0) {
- decided_ = create_utf16le_decoder();
- } else if (avail >= 2 && in[in_offset] != 0 && in[in_offset + 1] == 0) {
decided_ = create_utf16be_decoder();
+ } else if (avail >= 2 && in[in_offset] != 0 && in[in_offset + 1] == 0) {
+ decided_ = create_utf16le_decoder();
} else {
auto tmp = in_offset;
auto ret = utf::read8(in, tmp);