summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorJoão Távora <joaotavora@gmail.com>2023-04-07 19:33:12 +0100
committerJoão Távora <joaotavora@gmail.com>2023-04-07 19:33:12 +0100
commit88847dee125aa333b79829744eb4b16e8fd59ee8 (patch)
tree0d49651228b16de06539680439810ee655b980d6 /lisp
parentcb8c87a423a4897d873180a9e9be99e2ec20488d (diff)
downloademacs-88847dee125aa333b79829744eb4b16e8fd59ee8.tar.gz
Jsonrpc: don't bind inhibit-read-only to t so early
Related to https://github.com/joaotavora/eglot/discussions/1202, where because of this very wide binding to inhibit-read-only to t, Eglot was managing to write into read-only buffers from the response handlers that ran from within the stack of the jsonrpc.el process filter. This is of course illegal and dangerous, but Eglot wasn't made aware because of the binding. * lisp/jsonrpc.el (jsonrpc--process-filter): Don't bind inhibit-read-only so early.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/jsonrpc.el8
1 files changed, 4 insertions, 4 deletions
diff --git a/lisp/jsonrpc.el b/lisp/jsonrpc.el
index f583d116d20..3f9d4a7e818 100644
--- a/lisp/jsonrpc.el
+++ b/lisp/jsonrpc.el
@@ -566,15 +566,14 @@ With optional CLEANUP, kill any associated buffers."
(cl-return-from jsonrpc--process-filter))
(when (buffer-live-p (process-buffer proc))
(with-current-buffer (process-buffer proc)
- (let* ((inhibit-read-only t)
- (jsonrpc--in-process-filter t)
+ (let* ((jsonrpc--in-process-filter t)
(connection (process-get proc 'jsonrpc-connection))
(expected-bytes (jsonrpc--expected-bytes connection)))
;; Insert the text, advancing the process marker.
;;
(save-excursion
(goto-char (process-mark proc))
- (insert string)
+ (let ((inhibit-read-only t)) (insert string))
(set-marker (process-mark proc) (point)))
;; Loop (more than one message might have arrived)
;;
@@ -623,7 +622,8 @@ With optional CLEANUP, kill any associated buffers."
(jsonrpc-connection-receive connection
json-message)))))
(goto-char message-end)
- (delete-region (point-min) (point))
+ (let ((inhibit-read-only t))
+ (delete-region (point-min) (point)))
(setq expected-bytes nil))))
(t
;; Message is still incomplete