James Coglan
9a26f9cda3
Initial attempts at getting fuzzing set up with AFL and libfuzzer.
2017-02-13 00:23:48 +00:00
James Coglan
5c15da3a32
Set up C extension for running tests through valgrind.
2017-01-05 23:49:44 +00:00
James Coglan
319275d07b
Free the allocated Observer if allocating a Parser fails.
2017-01-05 22:26:48 +00:00
James Coglan
bfcc911a81
Replace the Queue_scan function and callback with an external iterator that exposes the values.
2017-01-05 21:58:46 +00:00
James Coglan
914dadb973
Port the frame serializer to C.
2017-01-05 21:38:26 +00:00
James Coglan
f36fe01a19
The parser opcode checking functions should take an opcode, not a Parser.
2016-12-31 17:57:37 +00:00
James Coglan
3f54340819
Add a C program to pass all the Autobahn test data through the parser directly, not via Ruby. We can use this to test the parser with Valgrind.
2016-12-31 16:05:47 +00:00
James Coglan
ede6490add
Refer to error messages as 'reasons' so as not to confuse them with WebSocket message structs.
2016-12-31 15:48:47 +00:00
James Coglan
99a6e459fe
The parser should keep reading as long as the read length is the same as the required length; sometimes this is zero.
2016-12-29 11:28:18 +00:00
James Coglan
21bfd23f1a
Implement basic RSV checking for the case when no extensions are active.
2016-12-29 01:55:23 +00:00
James Coglan
6ffb801dd1
Remove a redundant check for continuation frames when there's no initialised message.
2016-12-29 01:54:54 +00:00
James Coglan
97b497a520
Drop the old native extension and replace it with the new all-C parser. Replace the old masking code with a Ruby version, so that the Hybi class is pure Ruby.
2016-12-29 01:09:12 +00:00
James Coglan
524aa3f356
Add handling of close frames.
2016-12-29 00:34:36 +00:00
James Coglan
8eaae3a149
Implement hooks for ping/pong.
2016-12-28 18:04:27 +00:00
James Coglan
ce21d26e48
Check the length of incoming frames, including checking what they would add to the total message size.
2016-12-28 16:35:05 +00:00
James Coglan
721644495b
Implement the require_masking flag properly.
2016-12-28 16:14:52 +00:00
James Coglan
d6ddd6eedc
Implement some error handling: checking for non-final and too-long control frames, unmasked data, and continuation violations.
2016-12-28 15:59:25 +00:00
James Coglan
ae62fc6322
Begin emitting native parser errors back to the driver, starting by handling invalid opcodes.
2016-12-28 15:25:44 +00:00
James Coglan
fbd22b99aa
Make wsd_Queue_destroy() for-loop simpler and remove an unused variable warning.
2016-12-27 14:54:18 +00:00
James Coglan
8366d2790a
Move declarations to the top of WebSocketParser callbacks.
2016-12-27 14:50:22 +00:00
James Coglan
01e8bd904d
Wrap calls out to the Ruby driver and user callbacks in rb_protect.
2016-12-27 14:39:01 +00:00
James Coglan
4e747733a3
Begin wiring the C parser up to a Ruby driver. Driver::Native is currently a hollowed-out copy of Driver::Hybi with the parsing code removed.
2016-12-27 12:26:59 +00:00
James Coglan
d5b2af3782
Make the Observer and Parser structs opaque.
2016-12-26 16:38:37 +00:00
James Coglan
abd0a9372c
Make the Queue structs opaque.
2016-12-26 15:59:31 +00:00
James Coglan
94317d4461
Make the ReadBuffer structs opaque.
2016-12-26 15:17:05 +00:00
James Coglan
4a79ae4eea
Remove a couple of demeter violations: the parser accessing buffer->capacity, and buffer reaching into its queue via queue->head->value.
2016-12-26 12:55:46 +00:00
James Coglan
10f180e9f1
Use a macro for freeing then nulling a pointer, and make sure all destructors null out pointers where appropriate.
2016-12-26 12:14:51 +00:00
James Coglan
fd4bbb0c12
Don't check if pointers are not NULL before freeing them.
...
Freeing a null pointer is a no-op and doesn't stop you double-freeing
things. What actually stops that is nulling out pointers after you've
freed what they point at.
2016-12-24 12:02:10 +00:00
James Coglan
5f1a789e3b
Null out member pointers after freeing them in destroy() functions.
2016-12-24 11:02:00 +00:00
James Coglan
29321d3867
The 'masking' field of wsd_Parser is not needed; it's a serialisation setting not a parsing one.
2016-12-24 00:34:16 +00:00
James Coglan
67de925527
Define _GNU_SOURCE in parser.c rather than parser.h to fix asprintf() warning (thanks @mjg59).
2016-12-23 23:25:20 +00:00
James Coglan
285a14d4cc
Put the on_frame callback at the end of websocket_parser.c.
2016-12-23 23:22:52 +00:00
James Coglan
430ae06161
Use PRIu64 to print uint64_t.
2016-12-23 23:05:02 +00:00
James Coglan
87f93d2d6a
define _GNU_SOURCE to silence warnings about asprintf.
2016-12-23 22:56:56 +00:00
James Coglan
a269b58d09
Wrap wsd_Queue_each in braces to prevent 'C90 forbids mixed declarations and code' warnings.
2016-12-23 22:34:42 +00:00
James Coglan
51da1913ac
Deal with most of the C90 'forbids mixed declarations and code' warnings.
2016-12-23 22:24:29 +00:00
James Coglan
a6db9856b1
Include stdint.h to see if it fixes the build on Travis.
2016-12-23 21:58:50 +00:00
James Coglan
8d1792941f
Introduce the Observer type for adding callbacks into the parser.
2016-12-23 21:54:55 +00:00
James Coglan
5e23116c6e
Split the C parser up into multiple files, one per 'class'.
2016-12-23 21:22:21 +00:00
James Coglan
4772f71114
Put in more checks to the C parser to make sure each bit of the parser works, and begin putting in parser error handling.
2016-12-23 20:58:24 +00:00
James Coglan
11349c56b7
Queue.tail should be set to NULL if the current count is 1; count is not decremented until the end of the function.
2016-12-23 08:49:00 +00:00
James Coglan
a4ed6af167
Align names of forward declarations; it makes them easier for me to read.
2016-12-23 08:46:45 +00:00
James Coglan
2e6d2b070d
Begin a minimum-viable parser in C.
2016-12-22 21:10:33 +00:00
James Coglan
39824f5ace
Silence C compiler warnings; use 'long' instead of 'int' for ruby string lengths.
2015-10-11 14:15:57 +01:00
James Coglan
eb20069011
Migrate the internal representation of buffers from arrays to ASCII-8BIT strings, since this is what we're planning on handing off to extensions.
2014-12-05 09:17:09 +00:00
James Coglan
648e0c4cd1
Fix C compilation warnings about interleaved declarations and code.
2014-10-27 21:15:48 +00:00
James Coglan
d00cbadedb
Stop the Hybi parser hanging onto data it doesn't need after emitFrame().
2014-06-16 20:45:48 +01:00
James Coglan
1b3f32bbc7
Trailing blank lines are bad.
2014-05-17 00:34:48 +01:00
Steven Williamson
08189c2a30
Minor fixes to allow native gems to load.
...
- websocket_mask.rb is in lib which in turn then loads websocket_mask.so
which should reside in the extensions directory external to the gem
directory at least as of rubygems 2.2.2.
- Changed extensions directory to match gemname as suggested in rubygems
guide
Simplifies loading the native extension but only tested on ruby 2.1.1
and only in my environment.
2014-04-14 17:18:54 +01:00
James Coglan
1be1a33eb1
Rename all of the things: Faye::WebSocket is now WebSocket::Protocol.
2013-04-20 13:00:25 +01:00