From 8418ec325f83b3e55fc4b7ab5f630eecc6adb24c Mon Sep 17 00:00:00 2001 From: Sam Moorhouse Date: Mon, 22 Jan 2024 16:35:44 -0500 Subject: [PATCH 1/2] fix(server): improved packfile encoding to support short messages and unicode in errors --- src/proxy/routes/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/proxy/routes/index.js b/src/proxy/routes/index.js index 142e5648..804e2113 100644 --- a/src/proxy/routes/index.js +++ b/src/proxy/routes/index.js @@ -41,10 +41,10 @@ router.use( // ERROR PCT LINE -- MOVE THIS TO HELPER const errorMessage = `ERR\t${message}`; - const len = 6 + errorMessage.length; + const len = 6 + (new TextEncoder().encode(errorMessage)).length; const prefix = len.toString(16); - const packetMessage = `00${prefix}\x02${errorMessage}\n0000`; + const packetMessage = `${prefix.padStart(4, "0")}\x02${errorMessage}\n0000`; res.status(200).send(packetMessage); From 16586f15967535a58b948fb8a2cfaf786904e810 Mon Sep 17 00:00:00 2001 From: Sam Moorhouse Date: Tue, 23 Jan 2024 15:29:40 -0500 Subject: [PATCH 2/2] test(server): for short/emoji errors --- src/proxy/index.js | 2 +- src/proxy/routes/index.js | 18 +++++++++++------- test/testProxyRoute.js | 19 +++++++++++++++++++ 3 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 test/testProxyRoute.js diff --git a/src/proxy/index.js b/src/proxy/index.js index f504a10a..cce66961 100644 --- a/src/proxy/index.js +++ b/src/proxy/index.js @@ -1,7 +1,7 @@ /* eslint-disable max-len */ const proxyApp = require('express')(); const bodyParser = require('body-parser'); -const routes = require('./routes'); +const routes = require('./routes').router; const config = require('../config'); const db = require('../db'); const { GIT_PROXY_SERVER_PORT: proxyHttpPort } = require('../config/env').Vars; diff --git a/src/proxy/routes/index.js b/src/proxy/routes/index.js index 804e2113..a451e9fa 100644 --- a/src/proxy/routes/index.js +++ b/src/proxy/routes/index.js @@ -39,12 +39,7 @@ router.use( message = action.blockedMessage; } - // ERROR PCT LINE -- MOVE THIS TO HELPER - const errorMessage = `ERR\t${message}`; - const len = 6 + (new TextEncoder().encode(errorMessage)).length; - - const prefix = len.toString(16); - const packetMessage = `${prefix.padStart(4, "0")}\x02${errorMessage}\n0000`; + packetMessage = handleMessage(message); res.status(200).send(packetMessage); @@ -69,4 +64,13 @@ router.use( }), ); -module.exports = router; +const handleMessage = async(message) => { + const errorMessage = `ERR\t${message}`; + const len = 6 + new TextEncoder().encode(errorMessage).length; + + const prefix = len.toString(16); + const packetMessage = `${prefix.padStart(4, '0')}\x02${errorMessage}\n0000`; + return packetMessage +} + +module.exports = {router, handleMessage}; diff --git a/test/testProxyRoute.js b/test/testProxyRoute.js new file mode 100644 index 00000000..c9869030 --- /dev/null +++ b/test/testProxyRoute.js @@ -0,0 +1,19 @@ + +const handleMessage = require('../src/proxy/routes').handleMessage; +const chai = require('chai'); + +const expect = chai.expect; + +// Use this test as a template +describe('proxy error messages', async () => { + + it('should handle short messages', async function () { + const res = await handleMessage('one'); + expect(res).to.contain('one'); + }); + + it('should handle emoji messages', async function () { + const res = await handleMessage('❌ push failed: too many errors'); + expect(res).to.contain('❌'); + }); +});