File tree Expand file tree Collapse file tree 3 files changed +38
-11
lines changed Expand file tree Collapse file tree 3 files changed +38
-11
lines changed Original file line number Diff line number Diff line change @@ -268,6 +268,26 @@ Decoder.prototype.add = function(obj) {
268268 }
269269} ;
270270
271+ function isPayloadValid ( type , payload ) {
272+ switch ( type ) {
273+ case 0 : // CONNECT
274+ return typeof payload === "object" ;
275+ case 1 : // DISCONNECT
276+ return payload === undefined ;
277+ case 4 : // ERROR
278+ return typeof payload === "string" || typeof payload === "object" ;
279+ case 2 : // EVENT
280+ case 5 : // BINARY_EVENT
281+ return (
282+ isArray ( payload ) &&
283+ ( typeof payload [ 0 ] === "string" || typeof payload [ 0 ] === "number" )
284+ ) ;
285+ case 3 : // ACK
286+ case 6 : // BINARY_ACK
287+ return isArray ( payload ) ;
288+ }
289+ }
290+
271291/**
272292 * Decode a packet String (JSON data)
273293 *
@@ -329,11 +349,10 @@ function decodeString(str) {
329349 // look up json data
330350 if ( str . charAt ( ++ i ) ) {
331351 var payload = tryParse ( str . substr ( i ) ) ;
332- var isPayloadValid = payload !== false && ( p . type === exports . ERROR || isArray ( payload ) ) ;
333- if ( isPayloadValid ) {
352+ if ( isPayloadValid ( p . type , payload ) ) {
334353 p . data = payload ;
335354 } else {
336- return error ( ' invalid payload' ) ;
355+ throw new Error ( " invalid payload" ) ;
337356 }
338357 }
339358
Original file line number Diff line number Diff line change @@ -50,7 +50,7 @@ describe('parser', function() {
5050 it ( 'cleans itself up on close' , function ( ) {
5151 var packet = {
5252 type : parser . BINARY_EVENT ,
53- data : [ new ArrayBuffer ( 2 ) , new ArrayBuffer ( 3 ) ] ,
53+ data : [ "foo" , new ArrayBuffer ( 2 ) , new ArrayBuffer ( 3 ) ] ,
5454 id : 0 ,
5555 nsp : '/'
5656 } ;
Original file line number Diff line number Diff line change @@ -86,12 +86,20 @@ describe('parser', function(){
8686 }
8787 } ) ;
8888
89- it ( 'returns an error packet on parsing error' , function ( done ) {
90- var decoder = new parser . Decoder ( ) ;
91- decoder . on ( 'decoded' , function ( packet ) {
92- expect ( packet ) . to . eql ( { type : 4 , data : 'parser error: invalid payload' } ) ;
93- done ( ) ;
94- } ) ;
95- decoder . add ( '442["some","data"' ) ;
89+ it ( 'returns an error packet on parsing error' , function ( ) {
90+ function isInvalidPayload ( str ) {
91+ expect ( function ( ) {
92+ new parser . Decoder ( ) . add ( str )
93+ } ) . to . throwException ( / ^ i n v a l i d p a y l o a d $ / ) ;
94+ }
95+
96+ isInvalidPayload ( '442["some","data"' ) ;
97+ isInvalidPayload ( '0/admin,"invalid"' ) ;
98+ isInvalidPayload ( "1/admin,{}" ) ;
99+ isInvalidPayload ( '2/admin,"invalid' ) ;
100+ isInvalidPayload ( "2/admin,{}" ) ;
101+ isInvalidPayload ( '2[{"toString":"foo"}]' ) ;
102+ isInvalidPayload ( '2[true,"foo"]' ) ;
103+ isInvalidPayload ( '2[null,"bar"]' ) ;
96104 } ) ;
97105} ) ;
You can’t perform that action at this time.
0 commit comments