Commit 9836030d authored by Stefan Monnier's avatar Stefan Monnier

* src/json.c (Fjson_insert): Don't temporarily insert invalid bytes in buffer

parent fe3676fe
Pipeline #2231 failed with stage
in 51 minutes and 14 seconds
...@@ -739,9 +739,6 @@ usage: (json-insert OBJECT &rest ARGS) */) ...@@ -739,9 +739,6 @@ usage: (json-insert OBJECT &rest ARGS) */)
ptrdiff_t inserted_bytes = data.inserted_bytes; ptrdiff_t inserted_bytes = data.inserted_bytes;
if (inserted_bytes > 0) if (inserted_bytes > 0)
{ {
/* Make the inserted text part of the buffer, as unibyte text. */
insert_from_gap_1 (inserted_bytes, inserted_bytes, false);
/* If required, decode the stuff we've read into the gap. */ /* If required, decode the stuff we've read into the gap. */
struct coding_system coding; struct coding_system coding;
/* JSON strings are UTF-8 encoded strings. If for some reason /* JSON strings are UTF-8 encoded strings. If for some reason
...@@ -753,17 +750,19 @@ usage: (json-insert OBJECT &rest ARGS) */) ...@@ -753,17 +750,19 @@ usage: (json-insert OBJECT &rest ARGS) */)
!NILP (BVAR (current_buffer, enable_multibyte_characters)); !NILP (BVAR (current_buffer, enable_multibyte_characters));
if (CODING_MAY_REQUIRE_DECODING (&coding)) if (CODING_MAY_REQUIRE_DECODING (&coding))
{ {
move_gap_both (PT, PT_BYTE); /* Now we have all the new bytes at the beginning of the gap,
GAP_SIZE += inserted_bytes; but `decode_coding_gap` needs them at the end of the gap, so
ZV_BYTE -= inserted_bytes; we need to move them. */
Z_BYTE -= inserted_bytes; memmove (GAP_END_ADDR - inserted_bytes, GPT_ADDR, inserted_bytes);
ZV -= inserted_bytes;
Z -= inserted_bytes;
decode_coding_gap (&coding, inserted_bytes); decode_coding_gap (&coding, inserted_bytes);
inserted = coding.produced_char; inserted = coding.produced_char;
} }
else else
{ {
/* Make the inserted text part of the buffer, as unibyte text. */
eassert (NILP (BVAR (current_buffer, enable_multibyte_characters)));
insert_from_gap_1 (inserted_bytes, inserted_bytes, false);
/* The target buffer is unibyte, so we don't need to decode. */ /* The target buffer is unibyte, so we don't need to decode. */
invalidate_buffer_caches (current_buffer, invalidate_buffer_caches (current_buffer,
PT, PT + inserted_bytes); PT, PT + inserted_bytes);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment