🐛 hopefully fixing the crashes on Linux (#365)

This commit is contained in:
Niels 2016-11-22 20:13:47 +01:00
parent f620d74919
commit 6cc2d58d69
2 changed files with 12 additions and 22 deletions

View file

@ -8733,10 +8733,7 @@ basic_json_parser_66:
if (m_start != reinterpret_cast<const lexer_char_t*>(m_line_buffer.data()))
{
// copy unprocessed characters to line buffer
m_line_buffer.clear();
m_line_buffer.append(
reinterpret_cast<const typename string_t::value_type*>(m_start),
static_cast<size_t>(m_limit - m_start));
m_line_buffer.assign(m_start, m_limit);
m_cursor = m_limit;
}
@ -8842,18 +8839,16 @@ basic_json_parser_66:
// iterate the result between the quotes
for (const lexer_char_t* i = m_start + 1; i < m_cursor - 1; ++i)
{
// number of non-escaped characters
const size_t n = static_cast<size_t>(std::find(i, m_cursor - 1, '\\') - i);
if (n != 0)
// find next escape character
auto e = std::find(i, m_cursor - 1, '\\');
if (e != i)
{
result.append(reinterpret_cast<const typename string_t::value_type*>(i), n);
i += n - 1; // -1 because will ++i
result.append(i, e);
i = e - 1; // -1 because of ++i
}
else
{
// processing escaped character
// read next character
++i;

View file

@ -7882,10 +7882,7 @@ class basic_json
if (m_start != reinterpret_cast<const lexer_char_t*>(m_line_buffer.data()))
{
// copy unprocessed characters to line buffer
m_line_buffer.clear();
m_line_buffer.append(
reinterpret_cast<const typename string_t::value_type*>(m_start),
static_cast<size_t>(m_limit - m_start));
m_line_buffer.assign(m_start, m_limit);
m_cursor = m_limit;
}
@ -7991,18 +7988,16 @@ class basic_json
// iterate the result between the quotes
for (const lexer_char_t* i = m_start + 1; i < m_cursor - 1; ++i)
{
// number of non-escaped characters
const size_t n = static_cast<size_t>(std::find(i, m_cursor - 1, '\\') - i);
if (n != 0)
// find next escape character
auto e = std::find(i, m_cursor - 1, '\\');
if (e != i)
{
result.append(reinterpret_cast<const typename string_t::value_type*>(i), n);
i += n - 1; // -1 because will ++i
result.append(i, e);
i = e - 1; // -1 because of ++i
}
else
{
// processing escaped character
// read next character
++i;