diff --git a/packages/bruno-cli/src/utils/form-data.js b/packages/bruno-cli/src/utils/form-data.js index 180651c96..5741d794e 100644 --- a/packages/bruno-cli/src/utils/form-data.js +++ b/packages/bruno-cli/src/utils/form-data.js @@ -8,9 +8,14 @@ const path = require('path'); * @returns {string} Returns a order respecting standard compliant string of form encoded values */ const buildFormUrlEncodedPayload = (params) => { + if (typeof params !== 'object') return ''; + if (!Array.isArray(params)) return ''; const resultParams = new URLSearchParams(); for (const param of params) { - resultParams.append(param.name, param.value); + // Invalid items are ignored + if (typeof param !== 'object') continue; + if (!('name' in param)) continue; + resultParams.append(param.name, param.value ?? ''); } return resultParams.toString(); }; diff --git a/packages/bruno-electron/src/utils/form-data.js b/packages/bruno-electron/src/utils/form-data.js index 5e50a76f4..fe53c31cc 100644 --- a/packages/bruno-electron/src/utils/form-data.js +++ b/packages/bruno-electron/src/utils/form-data.js @@ -8,9 +8,14 @@ const path = require('path'); * @returns {string} Returns a order respecting standard compliant string of form encoded values */ const buildFormUrlEncodedPayload = (params) => { + if (typeof params !== 'object') return ''; + if (!Array.isArray(params)) return ''; const resultParams = new URLSearchParams(); for (const param of params) { - resultParams.append(param.name, param.value); + // Invalid items are ignored + if (typeof param !== 'object') continue; + if (!('name' in param)) continue; + resultParams.append(param.name, param.value ?? ''); } return resultParams.toString(); }; diff --git a/packages/bruno-electron/tests/network/prepare-request.spec.js b/packages/bruno-electron/tests/network/prepare-request.spec.js index a0cef78e2..96af32f3c 100644 --- a/packages/bruno-electron/tests/network/prepare-request.spec.js +++ b/packages/bruno-electron/tests/network/prepare-request.spec.js @@ -58,6 +58,27 @@ describe('prepare-request: prepareRequest', () => { const result = buildFormUrlEncodedPayload(requestObj); expect(result).toEqual(expected); }); + + it('returns empty string when params is not an object', () => { + expect(buildFormUrlEncodedPayload(null)).toEqual(''); + expect(buildFormUrlEncodedPayload('string')).toEqual(''); + expect(buildFormUrlEncodedPayload(123)).toEqual(''); + expect(buildFormUrlEncodedPayload(undefined)).toEqual(''); + }); + + it('ignores invalid items inside params array', () => { + const requestObj = [ + { name: 'item1', value: 'a' }, + 'not-an-object', + { value: 'missingName' }, + 42, + { name: 'item2', value: 'b' }, + { name: 'item3' } + ]; + const expected = 'item1=a&item2=b&item3='; + const result = buildFormUrlEncodedPayload(requestObj); + expect(result).toEqual(expected); + }); }); describe.each(['POST', 'PUT', 'PATCH'])('POST request with no body', (method) => {