Skip to content

Commit 466f92d

Browse files
committed
fix: ignore whitespace before & in formurlencoded (#699)
1 parent 59e63b4 commit 466f92d

File tree

6 files changed

+60
-28
lines changed

6 files changed

+60
-28
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11

2+
## [unreleased]
3+
4+
### Fix
5+
- ignore whitespace before & in formurlencoded (#699)
6+
27
## [6.16.6] (2025-01-11)
38

49
### Fix

src/plugins/core/registerCorePlugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ function initOnRequestHook(api: models.HttpyacHooksApi) {
2929
api.hooks.onRequest.addHook('setDefaultHttpyacHeaders', request.setDefaultHttpyacHeaders);
3030
api.hooks.onRequest.addHook('requestVariableReplacer', request.requestVariableReplacer);
3131
api.hooks.onRequest.addHook('transformRequestBody', request.transformRequestBodyToBuffer);
32-
api.hooks.onRequest.addHook('transfromMultilineFormUrlEncoded', request.transfromMultilineFormUrlEncoded);
32+
api.hooks.onRequest.addHook('transformMultilineFormUrlEncoded', request.transformMultilineFormUrlEncoded);
3333
api.hooks.onRequest.addHook('encodeRequestBody', request.encodeRequestBody);
3434

3535
api.hooks.onRequest.addInterceptor(request.isTrustedInterceptor);

src/plugins/core/request/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ export * from './resolveRequestBody';
77
export * from './setDefaultHttpyacHeaders';
88
export * from './setEnvRequestOptions';
99
export * from './transformRequestBodyToBuffer';
10-
export * from './transfromMultilineFormUrlEncoded';
10+
export * from './transformMultilineFormUrlEncoded';
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { transformMultilineFormUrlEncoded } from './transformMultilineFormUrlEncoded';
2+
import { Request } from '../../../models';
3+
describe('transformMultilineFormUrlEncoded', () => {
4+
it('transformMultilineFormUrlEncoded should return joined string', () => {
5+
const request = {
6+
body: 'foo = a&\nbar = b',
7+
contentType: {
8+
mimeType: 'application/x-www-form-urlencoded',
9+
},
10+
} as Request;
11+
transformMultilineFormUrlEncoded(request);
12+
expect(request.body).toBe('foo=a&bar=b');
13+
});
14+
15+
it('transformMultilineFormUrlEncoded should return without whitespace around &', () => {
16+
const request = {
17+
body: 'foo = a & bar = b',
18+
contentType: {
19+
mimeType: 'application/x-www-form-urlencoded',
20+
},
21+
} as Request;
22+
transformMultilineFormUrlEncoded(request);
23+
expect(request.body).toBe('foo=a&bar=b');
24+
});
25+
it('transformMultilineFormUrlEncoded should ignore whitespace in content', () => {
26+
const request = {
27+
body: 'foo = a & bar = bl a',
28+
contentType: {
29+
mimeType: 'application/x-www-form-urlencoded',
30+
},
31+
} as Request;
32+
transformMultilineFormUrlEncoded(request);
33+
expect(request.body).toBe('foo=a&bar=bl a');
34+
});
35+
it('transformMultilineFormUrlEncoded should ignore content on wrong mimetype', () => {
36+
const request = {
37+
body: 'foo = a&\nbar = b',
38+
} as Request;
39+
transformMultilineFormUrlEncoded(request);
40+
expect(request.body).toBe('foo = a&\nbar = b');
41+
});
42+
});

src/plugins/core/request/transfromMultilineFormUrlEncoded.ts renamed to src/plugins/core/request/transformMultilineFormUrlEncoded.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
import * as models from '../../../models';
22
import * as utils from '../../../utils';
33

4-
export async function transfromMultilineFormUrlEncoded(request: models.Request): Promise<void> {
4+
export async function transformMultilineFormUrlEncoded(request: models.Request): Promise<void> {
55
if (request.body && utils.isString(request.body) && utils.isMimeTypeFormUrlEncoded(request.contentType)) {
66
const lines = utils.toMultiLineArray(request.body);
77
if (lines.length > 0) {
88
const result = [];
99

10+
const splitCharts = ['=', '&'];
11+
1012
for (const line of lines) {
1113
result.push(
12-
line
13-
.split('=')
14-
.map(t => t.trim())
15-
.join('=')
14+
splitCharts.reduce(
15+
(p, c) =>
16+
p
17+
.split(c)
18+
.map(t => t.trim())
19+
.join(c),
20+
line
21+
)
1622
);
1723
}
1824
request.body = result.join('');

src/plugins/core/request/transfromMultilineFormUrlEncoded.spec.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)