diff --git a/AUTHORS b/AUTHORS index e960831c43..f70c7be747 100644 --- a/AUTHORS +++ b/AUTHORS @@ -89,6 +89,7 @@ Brian Hammond Brian McKenna Brian Schroeder Brian White +Bruno Jouhier Bryan Cantrill C. Scott Ananian CGavrila @@ -401,6 +402,7 @@ Maxwell Krohn Michael Axiak Michael Bernstein Michael Carter +Michael Dawson Michael Hart Michael Jackson Michael Kebe @@ -652,6 +654,7 @@ Zarko Stankovic Zoran Tomicic ayanamist fengmk2 +h7lin haoxin pflannery pkcs diff --git a/ChangeLog b/ChangeLog index 33eb8dbe7b..966dc330e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -2015.02.06, Version 0.12.0 (Stable) +2015.02.06, Version 0.12.0 (Stable), 2b18916ff054309a07408719b62e2b6a4f1e056a * npm: Upgrade to 2.5.1 @@ -948,6 +948,21 @@ * console: `console.dir()` bypasses inspect() methods (Nathan Rajlich) +2015.03.11, Version 0.10.37 (Maintenance) + +* uv: update to 0.10.36 (CVE-2015-0278) + +* domains: fix stack clearing after error handled (Jonas Dohse) + +* buffer: reword Buffer.concat error message (Chris Dickinson) + +* console: allow Object.prototype fields as labels (Julien Gilli) + +* V8: log version in profiler log file (Ben Noordhuis) + +* http: fix performance regression for GET requests (Florin-Cristian Gavrila) + + 2015.01.26, Version 0.10.36 (Stable), 09b482886bdd3d863c3d4e7d71264eac0daaf9e1 * openssl: update to 1.0.1l diff --git a/doc/api/fs.markdown b/doc/api/fs.markdown index a1727778e8..4c0f9bf7e8 100644 --- a/doc/api/fs.markdown +++ b/doc/api/fs.markdown @@ -92,7 +92,7 @@ to the completion callback. ## fs.renameSync(oldPath, newPath) -Synchronous rename(2). +Synchronous rename(2). Returns `undefined`. ## fs.ftruncate(fd, len, callback) @@ -101,7 +101,7 @@ given to the completion callback. ## fs.ftruncateSync(fd, len) -Synchronous ftruncate(2). +Synchronous ftruncate(2). Returns `undefined`. ## fs.truncate(path, len, callback) @@ -111,7 +111,7 @@ first argument. In this case, `fs.ftruncate()` is called. ## fs.truncateSync(path, len) -Synchronous truncate(2). +Synchronous truncate(2). Returns `undefined`. ## fs.chown(path, uid, gid, callback) @@ -120,7 +120,7 @@ to the completion callback. ## fs.chownSync(path, uid, gid) -Synchronous chown(2). +Synchronous chown(2). Returns `undefined`. ## fs.fchown(fd, uid, gid, callback) @@ -129,7 +129,7 @@ to the completion callback. ## fs.fchownSync(fd, uid, gid) -Synchronous fchown(2). +Synchronous fchown(2). Returns `undefined`. ## fs.lchown(path, uid, gid, callback) @@ -138,7 +138,7 @@ to the completion callback. ## fs.lchownSync(path, uid, gid) -Synchronous lchown(2). +Synchronous lchown(2). Returns `undefined`. ## fs.chmod(path, mode, callback) @@ -147,7 +147,7 @@ to the completion callback. ## fs.chmodSync(path, mode) -Synchronous chmod(2). +Synchronous chmod(2). Returns `undefined`. ## fs.fchmod(fd, mode, callback) @@ -156,7 +156,7 @@ are given to the completion callback. ## fs.fchmodSync(fd, mode) -Synchronous fchmod(2). +Synchronous fchmod(2). Returns `undefined`. ## fs.lchmod(path, mode, callback) @@ -167,7 +167,7 @@ Only available on Mac OS X. ## fs.lchmodSync(path, mode) -Synchronous lchmod(2). +Synchronous lchmod(2). Returns `undefined`. ## fs.stat(path, callback) @@ -207,7 +207,7 @@ the completion callback. ## fs.linkSync(srcpath, dstpath) -Synchronous link(2). +Synchronous link(2). Returns `undefined`. ## fs.symlink(srcpath, dstpath[, type], callback) @@ -220,7 +220,7 @@ Note that Windows junction points require the destination path to be absolute. ## fs.symlinkSync(srcpath, dstpath[, type]) -Synchronous symlink(2). +Synchronous symlink(2). Returns `undefined`. ## fs.readlink(path, callback) @@ -257,7 +257,7 @@ to the completion callback. ## fs.unlinkSync(path) -Synchronous unlink(2). +Synchronous unlink(2). Returns `undefined`. ## fs.rmdir(path, callback) @@ -266,7 +266,7 @@ to the completion callback. ## fs.rmdirSync(path) -Synchronous rmdir(2). +Synchronous rmdir(2). Returns `undefined`. ## fs.mkdir(path[, mode], callback) @@ -275,7 +275,7 @@ to the completion callback. `mode` defaults to `0777`. ## fs.mkdirSync(path[, mode]) -Synchronous mkdir(2). +Synchronous mkdir(2). Returns `undefined`. ## fs.readdir(path, callback) @@ -295,7 +295,7 @@ to the completion callback. ## fs.closeSync(fd) -Synchronous close(2). +Synchronous close(2). Returns `undefined`. ## fs.open(path, flags[, mode], callback) @@ -356,19 +356,27 @@ the end of the file. ## fs.openSync(path, flags[, mode]) -Synchronous version of `fs.open()`. +Synchronous version of `fs.open()`. Returns an integer representing the file +descriptor. ## fs.utimes(path, atime, mtime, callback) -## fs.utimesSync(path, atime, mtime) Change file timestamps of the file referenced by the supplied path. +## fs.utimesSync(path, atime, mtime) + +Synchronous version of `fs.utimes()`. Returns `undefined`. + + ## fs.futimes(fd, atime, mtime, callback) -## fs.futimesSync(fd, atime, mtime) Change the file timestamps of a file referenced by the supplied file descriptor. +## fs.futimesSync(fd, atime, mtime) + +Synchronous version of `fs.futimes()`. Returns `undefined`. + ## fs.fsync(fd, callback) Asynchronous fsync(2). No arguments other than a possible exception are given @@ -376,7 +384,7 @@ to the completion callback. ## fs.fsyncSync(fd) -Synchronous fsync(2). +Synchronous fsync(2). Returns `undefined`. ## fs.write(fd, buffer, offset, length[, position], callback) @@ -506,7 +514,7 @@ Example: ## fs.writeFileSync(filename, data[, options]) -The synchronous version of `fs.writeFile`. +The synchronous version of `fs.writeFile`. Returns `undefined`. ## fs.appendFile(filename, data[, options], callback) @@ -530,7 +538,7 @@ Example: ## fs.appendFileSync(filename, data[, options]) -The synchronous version of `fs.appendFile`. +The synchronous version of `fs.appendFile`. Returns `undefined`. ## fs.watchFile(filename[, options], listener) @@ -661,7 +669,8 @@ and handle the error when it's not there. ## fs.existsSync(path) -Synchronous version of `fs.exists`. +Synchronous version of `fs.exists()`. Returns `true` if the file exists, +`false` otherwise. `fs.existsSync()` will be deprecated. diff --git a/lib/url.js b/lib/url.js index 07a6c103a4..ac712318bc 100644 --- a/lib/url.js +++ b/lib/url.js @@ -639,8 +639,8 @@ Url.prototype.resolveObject = function(relative) { // then it must NOT get a trailing slash. var last = srcPath.slice(-1)[0]; var hasTrailingSlash = ( - (result.host || relative.host || srcPath.length > 1) && - (last === '.' || last === '..') || last === ''); + (result.host || relative.host) && (last === '.' || last === '..') || + last === ''); // strip single dots, resolve double dots to parent dir // if the path tries to go above the root, `up` ends up > 0 diff --git a/test/simple/test-domain-top-level-error-handler-clears-stack.js b/test/simple/test-domain-top-level-error-handler-clears-stack.js new file mode 100644 index 0000000000..f95864da64 --- /dev/null +++ b/test/simple/test-domain-top-level-error-handler-clears-stack.js @@ -0,0 +1,41 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var assert = require('assert'); +var domain = require('domain'); + +/* + * Make sure that the domains stack is cleared after a top-level domain + * error handler exited gracefully. + */ +var d = domain.create(); + +d.on('error', function() { + process.nextTick(function() { + if (domain._stack.length !== 1) { + process.exit(1); + } + }); +}); + +d.run(function() { + throw new Error('Error from domain'); +}); diff --git a/test/simple/test-url.js b/test/simple/test-url.js index d0ddaf2031..e81908a883 100644 --- a/test/simple/test-url.js +++ b/test/simple/test-url.js @@ -1178,14 +1178,6 @@ var relativeTests = [ ['/foo/bar/baz/', 'quux/baz', '/foo/bar/baz/quux/baz'], ['/foo/bar/baz', '../../../../../../../../quux/baz', '/quux/baz'], ['/foo/bar/baz', '../../../../../../../quux/baz', '/quux/baz'], - ['/foo', '.', '/'], - ['/foo', '..', '/'], - ['/foo/', '.', '/foo/'], - ['/foo/', '..', '/'], - ['/foo/bar', '.', '/foo/'], - ['/foo/bar', '..', '/'], - ['/foo/bar/', '.', '/foo/bar/'], - ['/foo/bar/', '..', '/foo/'], ['foo/bar', '../../../baz', '../../baz'], ['foo/bar/', '../../../baz', '../baz'], ['http://example.com/b//c//d;p?q#blarg', 'https:#hash2', 'https:///#hash2'],