| Index: include.preload.js |
| =================================================================== |
| --- a/include.preload.js |
| +++ b/include.preload.js |
| @@ -373,6 +373,7 @@ |
| // As far as possible we must track everything we use that could be |
| // sabotaged by the website later in order to circumvent us. |
| var RealWebSocket = WebSocket; |
| + var bindWebSocket = Function.prototype.bind.apply.bind(Function.prototype.bind, RealWebSocket); |
| var closeWebSocket = Function.prototype.call.bind(RealWebSocket.prototype.close); |
| var addEventListener = document.addEventListener.bind(document); |
| var removeEventListener = document.removeEventListener.bind(document); |
| @@ -394,13 +395,14 @@ |
| })); |
| } |
| - WebSocket = function WrappedWebSocket(url, protocols) |
| + WebSocket = function WrappedWebSocket() |
| { |
| - // Throw correct exceptions if the constructor is used improperly. |
| - if (!(this instanceof WrappedWebSocket)) return RealWebSocket(); |
| - if (arguments.length < 1) return new RealWebSocket(); |
| + var args = [null]; |
|
kzar
2016/08/11 14:25:05
I think this approach is extremely hard to follow,
Sebastian Noack
2016/08/11 14:38:46
Well, if you'd write your logic compliant to our c
kzar
2016/08/11 14:54:16
I didn't say anything about the code being shorter
Sebastian Noack
2016/08/11 15:11:35
I don't think that I agree. But there you go.
|
| + for (var i = 0; i < arguments.length; i++) |
| + args.push(arguments[i]); |
|
kzar
2016/08/11 14:25:05
This would allow for circumvention since we didn't
Sebastian Noack
2016/08/11 14:38:46
Well spotted, fixed.
|
| - var websocket = new RealWebSocket(url, protocols); |
| + var ctor = bindWebSocket(args); |
| + var websocket = this instanceof WrappedWebSocket ? new ctor : ctor(); |
| checkRequest(websocket.url, function(blocked) |
| { |