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

View File

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