Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit c0bb784

Browse files
author
Alan Shaw
committed
fix: better input validation for add
License: MIT Signed-off-by: Alan Shaw <[email protected]>
1 parent 008a14d commit c0bb784

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

src/core/components/files-regular.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const waterfall = require('async/waterfall')
1414
const isStream = require('is-stream')
1515
const isSource = require('is-pull-stream').isSource
1616
const Duplex = require('readable-stream').Duplex
17-
const OtherBuffer = require('buffer').Buffer
17+
const isString = require('lodash/isString')
1818
const CID = require('cids')
1919
const toB58String = require('multihashes').toB58String
2020
const errCode = require('err-code')
@@ -292,15 +292,23 @@ module.exports = function (self) {
292292

293293
options = options || {}
294294

295-
const ok = Buffer.isBuffer(data) ||
296-
isStream.readable(data) ||
297-
Array.isArray(data) ||
298-
OtherBuffer.isBuffer(data) ||
299-
typeof data === 'object' ||
300-
isSource(data)
295+
// Buffer, pull stream or Node.js stream
296+
const isBufferOrStream = obj => Buffer.isBuffer(obj) || isStream.readable(obj) || isSource(obj)
297+
// An object like { content?, path? }, where content isBufferOrStream and path isString
298+
const isContentObject = obj => {
299+
if (typeof obj !== 'object') return false
300+
// path is optional if content is present
301+
if (obj.content) return isBufferOrStream(obj.content)
302+
// path must be a non-empty string if no content
303+
return Boolean(obj.path) && isString(obj.path)
304+
}
305+
// An input atom: a buffer, stream or content object
306+
const isInput = obj => isBufferOrStream(obj) || isContentObject(obj)
307+
// All is ok if data isInput or data is an array of isInput
308+
const ok = isInput(data) || (Array.isArray(data) && data.every(isInput))
301309

302310
if (!ok) {
303-
return callback(new Error('first arg must be a buffer, readable stream, pull stream, an object or array of objects'))
311+
return callback(new Error('invalid input: expected buffer, readable stream, pull stream, object or array of objects'))
304312
}
305313

306314
// CID v0 is for multihashes encoded with sha2-256

0 commit comments

Comments
 (0)