To: vim_dev@googlegroups.com Subject: Patch 9.0.1487 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.1487 Problem: Content-type header for LSP channel not according to spec. Solution: Use "vscode-jsonrpc" instead of "vim-jsonrpc". (Yegappan Lakshmanan, closes #12295) Files: src/json.c, src/testdir/test_channel.vim, src/testdir/test_channel_lsp.py *** ../vim-9.0.1486/src/json.c 2023-03-04 20:47:32.304617857 +0000 --- src/json.c 2023-04-25 14:53:17.566916932 +0100 *************** *** 103,111 **** ga_append(&ga, NUL); ga_init2(&lspga, 1, 4000); vim_snprintf((char *)IObuff, IOSIZE, "Content-Length: %u\r\n" ! "Content-Type: application/vim-jsonrpc; charset=utf-8\r\n\r\n", ga.ga_len - 1); ga_concat(&lspga, IObuff); ga_concat_len(&lspga, ga.ga_data, ga.ga_len); --- 103,112 ---- ga_append(&ga, NUL); ga_init2(&lspga, 1, 4000); + // Header according to LSP specification. vim_snprintf((char *)IObuff, IOSIZE, "Content-Length: %u\r\n" ! "Content-Type: application/vscode-jsonrpc; charset=utf-8\r\n\r\n", ga.ga_len - 1); ga_concat(&lspga, IObuff); ga_concat_len(&lspga, ga.ga_data, ga.ga_len); *** ../vim-9.0.1486/src/testdir/test_channel.vim 2023-01-28 19:18:56.725720605 +0000 --- src/testdir/test_channel.vim 2023-04-25 14:49:30.862921857 +0100 *************** *** 2670,2676 **** " " Test for sending a raw message " let g:lspNotif = [] " let s = "Content-Length: 62\r\n" ! " let s ..= "Content-Type: application/vim-jsonrpc; charset=utf-8\r\n" " let s ..= "\r\n" " let s ..= '{"method":"echo","jsonrpc":"2.0","params":{"m":"raw-message"}}' " call ch_sendraw(ch, s) --- 2670,2676 ---- " " Test for sending a raw message " let g:lspNotif = [] " let s = "Content-Length: 62\r\n" ! " let s ..= "Content-Type: application/vscode-jsonrpc; charset=utf-8\r\n" " let s ..= "\r\n" " let s ..= '{"method":"echo","jsonrpc":"2.0","params":{"m":"raw-message"}}' " call ch_sendraw(ch, s) *** ../vim-9.0.1486/src/testdir/test_channel_lsp.py 2023-01-09 16:25:55.570919210 +0000 --- src/testdir/test_channel_lsp.py 2023-04-25 14:49:30.862921857 +0100 *************** *** 35,41 **** v['id'] = msgid s = json.dumps(v) resp = "Content-Length: " + str(len(s)) + "\r\n" ! resp += "Content-Type: application/vim-jsonrpc; charset=utf-8\r\n" resp += "\r\n" resp += s if self.debug: --- 35,41 ---- v['id'] = msgid s = json.dumps(v) resp = "Content-Length: " + str(len(s)) + "\r\n" ! resp += "Content-Type: application/vscode-jsonrpc; charset=utf-8\r\n" resp += "\r\n" resp += s if self.debug: *************** *** 46,52 **** v = 'wrong-payload' s = json.dumps(v) resp = "Content-Length: " + str(len(s)) + "\r\n" ! resp += "Content-Type: application/vim-jsonrpc; charset=utf-8\r\n" resp += "\r\n" resp += s self.request.sendall(resp.encode('utf-8')) --- 46,52 ---- v = 'wrong-payload' s = json.dumps(v) resp = "Content-Length: " + str(len(s)) + "\r\n" ! resp += "Content-Type: application/vscode-jsonrpc; charset=utf-8\r\n" resp += "\r\n" resp += s self.request.sendall(resp.encode('utf-8')) *************** *** 60,66 **** def send_empty_payload(self): resp = "Content-Length: 0\r\n" ! resp += "Content-Type: application/vim-jsonrpc; charset=utf-8\r\n" resp += "\r\n" self.request.sendall(resp.encode('utf-8')) --- 60,66 ---- def send_empty_payload(self): resp = "Content-Length: 0\r\n" ! resp += "Content-Type: application/vscode-jsonrpc; charset=utf-8\r\n" resp += "\r\n" self.request.sendall(resp.encode('utf-8')) *************** *** 71,77 **** resp = "Host: abc.vim.org\r\n" resp += "User-Agent: Python\r\n" resp += "Accept-Language: en-US,en\r\n" ! resp += "Content-Type: application/vim-jsonrpc; charset=utf-8\r\n" resp += "Content-Length: " + str(len(s)) + "\r\n" resp += "\r\n" resp += s --- 71,77 ---- resp = "Host: abc.vim.org\r\n" resp += "User-Agent: Python\r\n" resp += "Accept-Language: en-US,en\r\n" ! resp += "Content-Type: application/vscode-jsonrpc; charset=utf-8\r\n" resp += "Content-Length: " + str(len(s)) + "\r\n" resp += "\r\n" resp += s *************** *** 93,99 **** # test for sending the http header without length v = {'jsonrpc': '2.0', 'id': msgid, 'result': resp_dict} s = json.dumps(v) ! resp = "Content-Type: application/vim-jsonrpc; charset=utf-8\r\n" resp += "\r\n" resp += s self.request.sendall(resp.encode('utf-8')) --- 93,99 ---- # test for sending the http header without length v = {'jsonrpc': '2.0', 'id': msgid, 'result': resp_dict} s = json.dumps(v) ! resp = "Content-Type: application/vscode-jsonrpc; charset=utf-8\r\n" resp += "\r\n" resp += s self.request.sendall(resp.encode('utf-8')) *** ../vim-9.0.1486/src/version.c 2023-04-24 22:41:48.438538780 +0100 --- src/version.c 2023-04-25 14:52:00.622917075 +0100 *************** *** 697,698 **** --- 697,700 ---- { /* Add new patch number below this line */ + /**/ + 1487, /**/ -- Clothes make the man. Naked people have little or no influence on society. -- Mark Twain (Samuel Clemens) (1835-1910) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///