From 58731039f49ff589e7017094a81d7f1b3e64d095 Mon Sep 17 00:00:00 2001 From: Alex Titarenko Date: Tue, 27 May 2025 10:14:14 -0700 Subject: [PATCH] fix: github push --- src/utils/trimEndChar.ts | 12 ++++++++++++ src/wire/parseRefsAdResponse.ts | 5 +++-- tests/utils-trimEndChar.test.ts | Bin 0 -> 1460 bytes 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 src/utils/trimEndChar.ts create mode 100644 tests/utils-trimEndChar.test.ts diff --git a/src/utils/trimEndChar.ts b/src/utils/trimEndChar.ts new file mode 100644 index 0000000..8e708f0 --- /dev/null +++ b/src/utils/trimEndChar.ts @@ -0,0 +1,12 @@ +export function trimEndChar(str: string, char: string): string { + if (!char || char.length !== 1) { + throw new Error("trimEndChar expects a single character.") + } + + let end = str.length + while (end > 0 && str[end - 1] === char) { + end-- + } + + return str.slice(0, end) +} diff --git a/src/wire/parseRefsAdResponse.ts b/src/wire/parseRefsAdResponse.ts index dff9a0b..55248e7 100644 --- a/src/wire/parseRefsAdResponse.ts +++ b/src/wire/parseRefsAdResponse.ts @@ -1,7 +1,8 @@ import { Buffer } from 'buffer' import { EmptyServerResponseError } from '../errors/EmptyServerResponseError' -import { ParseError } from '../errors/ParseError' import { GitPktLine } from '../models/GitPktLine' +import { ParseError } from '../errors/ParseError' +import { trimEndChar } from '../utils/trimEndChar' /** @internal */ export type RemoteHTTPV1 = { @@ -89,7 +90,7 @@ export async function parseRefsAdResponse( } function splitAndAssert(line: string, sep: string, expected: string) { - const split = line.trim().split(sep) + const split = trimEndChar(line.trim(), '\x00').split(sep) if (split.length !== 2) { throw new ParseError(expected, line) } diff --git a/tests/utils-trimEndChar.test.ts b/tests/utils-trimEndChar.test.ts new file mode 100644 index 0000000000000000000000000000000000000000..f339fe3c064707644010f689ded49d76bd6db49c GIT binary patch literal 1460 zcmeH{&u`i=6vun!uXwkBRFgnR2uMtV7PLdP+isJJ<2-}c#7=Fe?Ns%D-wTxTLz|}U zyc`@m&;CC9`TL2gYGXaTg14$#>f&b0ExduWrh=f~51kcZ<5lUxlL%6#lG?G;VlFMLh9!cW=sm`>ETzhTz*v6a~Fg73a_%g!VVl-7EF_-Yg$U zvU|9o-Y(x;`=W;0mJ@Au2|*(kSX{tzfyzIF@_9MGy{ekht9$Y&_^r}Aw;nM#_AY=R z@0X={CU~$$&79H#4+Cxdp=+_^o*)2iSZ&S5lDmQCmJM;{`363+-xuh)D#@=qVdhoM zTEH0X>6vRntj$MIak1rjiRVF*FN{WTKPuvQ)*ftn@f!fCN{{we41drY?g?hYDCTjI hi8#q5VYR!U6L0Jb{@2cE6^_36jVsQq_3jC>#ZSjO%}W3P literal 0 HcmV?d00001