vbmithr / ocaml-websocket

Websocket library for OCaml
ISC License
162 stars 44 forks source link

Corrupted content of received frames #77

Closed zoggy closed 7 years ago

zoggy commented 7 years ago

Following my comment in https://github.com/vbmithr/ocaml-websocket/issues/58, here is a repro case:

Here is the server output:

wscat: wscat: endp = (TCP ((V4 127.0.0.1) 8080))
wscat: wscat: server = (TCP (Port 8080))
wscat: wscat: Connection from client id 0
wscat: wscat: Client 0: { Websocket.Frame.opcode = Websocket.Frame.Opcode.Text; extension = 0;
wscat: wscat:   final = true;
wscat: wscat:   content =
wscat: wscat:   ").\127E1&eX>,\127G<$gO<!xZ).zM1;gA>,xA+9p@6,~Z).y@6,~Z)'\127G0,y@6;gO0,\127G0;gO<!xA+9p@< y@6;gO0,\127G+9pA7,\127G+9pA7,\127G0;gO7!xM0;gO7!xM0;g@6,~@69eO0,\127G+9pA<!xZ).~F<!xA+9p@6,~X>!xZ< eX> rF1&eX> rG) pM0,y@6;gO0,\127G+9pA<!xA).rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<"
wscat: wscat:   }

and the client output:

> ).E1&eX>,G<$gO<!xZ).zM1;gA>,xA+9p@6,~Z).y@6,~Z)'G0,y@6;gO0,G0;gO<!xA+9p@< y@6;gO0,G+9pA7,G+9pA7,G0;gO7!xM0;gO7!xM0;g@6,~@69eO0,G+9pA<!xZ).~F<!xA+9p@6,~X>!xZ< eX> rF1&eX> rG) pM0,y@6;gO0,G+9pA<!xA).rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<,rM<

Sending the same string again to the client, here is the server output:

wscat: wscat: Client 0: { Websocket.Frame.opcode = Websocket.Frame.Opcode.Text; extension = 0;
wscat: wscat:   final = true;
wscat: wscat:   content =
wscat: wscat:   "\234\200w\178\242\192m\175\253\202w\176\255\194o\184\255\199p\173\234\200r\186\242\221o\182\253\202p\182\232\223x\183\245\202v\173\234\200q\183\245\202v\173\234\193w\176\243\202q\183\245\221o\184\243\202w\176\243\221o\184\255\199p\182\232\223x\183\255\198q\183\245\221o\184\243\202w\176\232\223x\182\244\202w\176\232\223x\182\244\202w\176\243\221o\184\244\199p\186\243\221o\184\244\199p\186\243\221o\183\245\202v\183\245\223m\184\243\202w\176\232\223x\182\255\199p\173\234\200v\177\255\199p\182\232\223x\183\245\202v\175\253\199p\173\255\198m\175\253\198z\177\242\192m\175\253\198z\176\234\198x\186\243\202q\183\245\221o\184\243\202w\176\232\223x\182\255\199p\182\234\200z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255\202z\186\255"
wscat: wscat:   }

So it seems that there is a corrupted buffer somewhere.

zoggy commented 7 years ago

This was a missing Buffer.clear. Fixing it...