Skip to content

Commit

Permalink
Always use the qs module, even in simple mode
Browse files Browse the repository at this point in the history
  • Loading branch information
papandreou committed Feb 10, 2020
1 parent 9c62ed7 commit ffed8a4
Showing 1 changed file with 7 additions and 41 deletions.
48 changes: 7 additions & 41 deletions lib/types/urlencoded.js
Expand Up @@ -19,19 +19,14 @@ var debug = require('debug')('body-parser:urlencoded')
var deprecate = require('depd')('body-parser')
var read = require('../read')
var typeis = require('type-is')
var qs = require('qs')

/**
* Module exports.
*/

module.exports = urlencoded

/**
* Cache of parser modules.
*/

var parsers = Object.create(null)

/**
* Create a middleware to parse urlencoded bodies.
*
Expand Down Expand Up @@ -133,7 +128,6 @@ function extendedparser (options) {
var parameterLimit = options.parameterLimit !== undefined
? options.parameterLimit
: 1000
var parse = parser('qs')

if (isNaN(parameterLimit) || parameterLimit < 1) {
throw new TypeError('option parameterLimit must be a positive number')
Expand All @@ -156,7 +150,7 @@ function extendedparser (options) {
var arrayLimit = Math.max(100, paramCount)

debug('parse extended urlencoding')
return parse(body, {
return qs.parse(body, {
allowPrototypes: true,
arrayLimit: arrayLimit,
depth: Infinity,
Expand Down Expand Up @@ -204,37 +198,6 @@ function parameterCount (body, limit) {
return count
}

/**
* Get parser for module name dynamically.
*
* @param {string} name
* @return {function}
* @api private
*/

function parser (name) {
var mod = parsers[name]

if (mod !== undefined) {
return mod.parse
}

// this uses a switch for static require analysis
switch (name) {
case 'qs':
mod = require('qs')
break
case 'querystring':
mod = require('querystring')
break
}

// store to prevent invoking require()
parsers[name] = mod

return mod.parse
}

/**
* Get the simple query parser.
*
Expand All @@ -245,7 +208,6 @@ function simpleparser (options) {
var parameterLimit = options.parameterLimit !== undefined
? options.parameterLimit
: 1000
var parse = parser('querystring')

if (isNaN(parameterLimit) || parameterLimit < 1) {
throw new TypeError('option parameterLimit must be a positive number')
Expand All @@ -266,7 +228,11 @@ function simpleparser (options) {
}

debug('parse urlencoding')
return parse(body, undefined, undefined, { maxKeys: parameterLimit })
return qs.parse(body, {
allowPrototypes: true,
depth: 0,
parameterLimit: parameterLimit
})
}
}

Expand Down

0 comments on commit ffed8a4

Please sign in to comment.