mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-29 04:42:18 +00:00
73 lines
2.3 KiB
JavaScript
73 lines
2.3 KiB
JavaScript
// EventEmitter has been removed from process in node >= 7
|
|
// https://github.com/nodejs/node/commit/62b544290a075fe38e233887a06c408ba25a1c71
|
|
/*
|
|
A socket.io dependency expects the EventEmitter to be available at
|
|
`process.EventEmitter`.
|
|
See this trace:
|
|
---
|
|
|
|
/app/node_modules/policyfile/lib/server.js:254
|
|
Object.keys(process.EventEmitter.prototype).forEach(function proxy (key){
|
|
^
|
|
|
|
TypeError: Cannot read property 'prototype' of undefined
|
|
at Object.<anonymous> (/app/node_modules/policyfile/lib/server.js:254:34)
|
|
*/
|
|
if (process.versions.node.split('.')[0] >= 7) {
|
|
// eslint-disable-next-line node/no-deprecated-api
|
|
process.EventEmitter = require('events')
|
|
}
|
|
|
|
var io = require('socket.io')
|
|
|
|
if (io.version === '0.9.16' || io.version === '0.9.19') {
|
|
console.log('patching socket.io hybi-16 transport frame prototype')
|
|
var transports = require('socket.io/lib/transports/websocket/hybi-16.js')
|
|
transports.prototype.frame = patchedFrameHandler
|
|
// file hybi-07-12 has the same problem but no browsers are using that protocol now
|
|
}
|
|
|
|
function patchedFrameHandler(opcode, str) {
|
|
var dataBuffer = Buffer.from(str)
|
|
var dataLength = dataBuffer.length
|
|
var startOffset = 2
|
|
var secondByte = dataLength
|
|
if (dataLength === 65536) {
|
|
console.log('fixing invalid frame length in socket.io')
|
|
}
|
|
if (dataLength > 65535) {
|
|
// original code had > 65536
|
|
startOffset = 10
|
|
secondByte = 127
|
|
} else if (dataLength > 125) {
|
|
startOffset = 4
|
|
secondByte = 126
|
|
}
|
|
var outputBuffer = Buffer.alloc(dataLength + startOffset)
|
|
outputBuffer[0] = opcode
|
|
outputBuffer[1] = secondByte
|
|
dataBuffer.copy(outputBuffer, startOffset)
|
|
switch (secondByte) {
|
|
case 126:
|
|
outputBuffer[2] = dataLength >>> 8
|
|
outputBuffer[3] = dataLength % 256
|
|
break
|
|
case 127:
|
|
var l = dataLength
|
|
for (var i = 1; i <= 8; ++i) {
|
|
outputBuffer[startOffset - i] = l & 0xff
|
|
l >>>= 8
|
|
}
|
|
}
|
|
return outputBuffer
|
|
}
|
|
|
|
const parser = require('socket.io/lib/parser')
|
|
const decodePacket = parser.decodePacket
|
|
parser.decodePacket = function (data) {
|
|
if (typeof data !== 'string') return {}
|
|
const firstColon = data.indexOf(':')
|
|
if (firstColon === -1) return {}
|
|
if (data.indexOf(':', firstColon + 1) === -1) return {}
|
|
return decodePacket(data)
|
|
}
|