Skip to content

Commit

Permalink
Merge branch 'v1.x' into dependabot/github_actions/peter-evans/create…
Browse files Browse the repository at this point in the history
…-pull-request-5
  • Loading branch information
DigitalBrainJS committed Apr 19, 2023
2 parents c30e5fd + 1b8cc3b commit 329430b
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 6 deletions.
5 changes: 4 additions & 1 deletion .github/ISSUE_TEMPLATE/BUG_REPORT.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,10 @@ body:
id: reproduce
attributes:
label: 'To Reproduce'
description: Code snippet to reproduce, ideally that will work by pasting into something like https://npm.runkit.com/axios, a hosted solution, or a repository that illustrates the issue. **If your problem is not reproducible, please file under Support or Usage Question**
description: |
Code snippet to reproduce, ideally if you can provide a live example in https://codesandbox.io/ sandbox or a repository that illustrates the issue.
(You can use https://codesandbox.io/p/sandbox/zen-knuth-9hvhzq as a node sandbox template, or https://codesandbox.io/s/axios-browser-issue-2l8jec as a browser template)
**If your problem is not reproducible, please file under Support or Usage Question**
validations:
required: false
- type: textarea
Expand Down
14 changes: 9 additions & 5 deletions lib/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,16 @@ const isStream = (val) => isObject(val) && isFunction(val.pipe);
* @returns {boolean} True if value is an FormData, otherwise false
*/
const isFormData = (thing) => {
const pattern = '[object FormData]';
let kind;
return thing && (
(typeof FormData === 'function' && thing instanceof FormData) ||
toString.call(thing) === pattern ||
(isFunction(thing.toString) && thing.toString() === pattern)
);
(typeof FormData === 'function' && thing instanceof FormData) || (
isFunction(thing.append) && (
(kind = kindOf(thing)) === 'formdata' ||
// detect form-data instance
(kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')
)
)
)
}

/**
Expand Down
31 changes: 31 additions & 0 deletions test/unit/utils/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,37 @@ describe('utils', function (){
});
assert.equal(utils.isFormData(new FormData()), true);
});

it('should not call toString method on built-in objects instances', () => {
const buf = Buffer.from('123');

buf.toString = () => assert.fail('should not be called');

assert.equal(utils.isFormData(buf), false);
});

it('should not call toString method on built-in objects instances, even if append method exists', () => {
const buf = Buffer.from('123');

buf.append = () => {};

buf.toString = () => assert.fail('should not be called');

assert.equal(utils.isFormData(buf), false);
});

it('should detect custom FormData instances by toStringTag signature and append method presence', () => {
class FormData {
append(){

}

get [Symbol.toStringTag]() {
return 'FormData';
}
}
assert.equal(utils.isFormData(new FormData()), true);
});
});

describe('toJSON', function (){
Expand Down

0 comments on commit 329430b

Please sign in to comment.