File tree 3 files changed +38
-11
lines changed
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) {
268
268
}
269
269
} ;
270
270
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
+
271
291
/**
272
292
* Decode a packet String (JSON data)
273
293
*
@@ -329,11 +349,10 @@ function decodeString(str) {
329
349
// look up json data
330
350
if ( str . charAt ( ++ i ) ) {
331
351
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 ) ) {
334
353
p . data = payload ;
335
354
} else {
336
- return error ( ' invalid payload' ) ;
355
+ throw new Error ( " invalid payload" ) ;
337
356
}
338
357
}
339
358
Original file line number Diff line number Diff line change @@ -50,7 +50,7 @@ describe('parser', function() {
50
50
it ( 'cleans itself up on close' , function ( ) {
51
51
var packet = {
52
52
type : parser . BINARY_EVENT ,
53
- data : [ new ArrayBuffer ( 2 ) , new ArrayBuffer ( 3 ) ] ,
53
+ data : [ "foo" , new ArrayBuffer ( 2 ) , new ArrayBuffer ( 3 ) ] ,
54
54
id : 0 ,
55
55
nsp : '/'
56
56
} ;
Original file line number Diff line number Diff line change @@ -86,12 +86,20 @@ describe('parser', function(){
86
86
}
87
87
} ) ;
88
88
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"]' ) ;
96
104
} ) ;
97
105
} ) ;
You can’t perform that action at this time.
0 commit comments