To: vim_dev@googlegroups.com Subject: Patch 7.4.1252 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.1252 Problem: The channel test server may receive two messages concatenated. Solution: Split the messages. Files: src/testdir/test_channel.py *** ../vim-7.4.1251/src/testdir/test_channel.py 2016-02-03 21:32:39.171071570 +0100 --- src/testdir/test_channel.py 2016-02-03 22:20:09.681119193 +0100 *************** *** 45,100 **** print("=== socket closed ===") break print("received: {}".format(data)) ! try: ! decoded = json.loads(data) ! except ValueError: ! print("json decoding failed") ! decoded = [-1, ''] ! ! # Send a response if the sequence number is positive. ! if decoded[0] >= 0: ! if decoded[1] == 'hello!': ! # simply send back a string ! response = "got it" ! elif decoded[1] == 'make change': ! # Send two ex commands at the same time, before replying to ! # the request. ! cmd = '["ex","call append(\\"$\\",\\"added1\\")"]' ! cmd += '["ex","call append(\\"$\\",\\"added2\\")"]' ! print("sending: {}".format(cmd)) ! thesocket.sendall(cmd.encode('utf-8')) ! response = "ok" ! elif decoded[1] == 'eval-works': ! # Send an eval request. We ignore the response. ! cmd = '["eval","\\"foo\\" . 123", -1]' ! print("sending: {}".format(cmd)) ! thesocket.sendall(cmd.encode('utf-8')) ! response = "ok" ! elif decoded[1] == 'eval-fails': ! # Send an eval request that will fail. ! cmd = '["eval","xxx", -2]' ! print("sending: {}".format(cmd)) ! thesocket.sendall(cmd.encode('utf-8')) ! response = "ok" ! elif decoded[1] == 'eval-result': ! # Send back the last received eval result. ! response = last_eval ! elif decoded[1] == '!quit!': ! # we're done ! sys.exit(0) ! elif decoded[1] == '!crash!': ! # Crash! ! 42 / 0 else: ! response = "what?" ! encoded = json.dumps([decoded[0], response]) ! print("sending: {}".format(encoded)) ! thesocket.sendall(encoded.encode('utf-8')) ! ! # Negative numbers are used for "eval" responses. ! elif decoded[0] < 0: ! last_eval = decoded thesocket = None --- 45,113 ---- print("=== socket closed ===") break print("received: {}".format(data)) ! ! # We may receive two messages at once. Take the part up to the ! # matching "]" (recognized by finding "]["). ! while data != '': ! splitidx = data.find('][') ! if splitidx < 0: ! todo = data ! data = '' else: ! todo = data[:splitidx + 1] ! data = data[splitidx + 1:] ! print("using: {}".format(todo)) ! ! try: ! decoded = json.loads(todo) ! except ValueError: ! print("json decoding failed") ! decoded = [-1, ''] ! ! # Send a response if the sequence number is positive. ! if decoded[0] >= 0: ! if decoded[1] == 'hello!': ! # simply send back a string ! response = "got it" ! elif decoded[1] == 'make change': ! # Send two ex commands at the same time, before replying to ! # the request. ! cmd = '["ex","call append(\\"$\\",\\"added1\\")"]' ! cmd += '["ex","call append(\\"$\\",\\"added2\\")"]' ! print("sending: {}".format(cmd)) ! thesocket.sendall(cmd.encode('utf-8')) ! response = "ok" ! elif decoded[1] == 'eval-works': ! # Send an eval request. We ignore the response. ! cmd = '["eval","\\"foo\\" . 123", -1]' ! print("sending: {}".format(cmd)) ! thesocket.sendall(cmd.encode('utf-8')) ! response = "ok" ! elif decoded[1] == 'eval-fails': ! # Send an eval request that will fail. ! cmd = '["eval","xxx", -2]' ! print("sending: {}".format(cmd)) ! thesocket.sendall(cmd.encode('utf-8')) ! response = "ok" ! elif decoded[1] == 'eval-result': ! # Send back the last received eval result. ! response = last_eval ! elif decoded[1] == '!quit!': ! # we're done ! sys.exit(0) ! elif decoded[1] == '!crash!': ! # Crash! ! 42 / 0 ! else: ! response = "what?" ! ! encoded = json.dumps([decoded[0], response]) ! print("sending: {}".format(encoded)) ! thesocket.sendall(encoded.encode('utf-8')) ! # Negative numbers are used for "eval" responses. ! elif decoded[0] < 0: ! last_eval = decoded thesocket = None *** ../vim-7.4.1251/src/version.c 2016-02-03 21:56:38.380012968 +0100 --- src/version.c 2016-02-03 22:01:27.884974378 +0100 *************** *** 744,745 **** --- 744,747 ---- { /* Add new patch number below this line */ + /**/ + 1252, /**/ -- hundred-and-one symptoms of being an internet addict: 124. You begin conversations with, "Who is your internet service provider?" /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///