@@ -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
@@ -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
@@ -425,8 +425,6 @@ jslint:
PYTHONPATH=tools/closure_linter/ $(PYTHON) tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ --exclude_files lib/punycode.js

CPPLINT_EXCLUDE ?=
CPPLINT_EXCLUDE += src/node_dtrace.cc
CPPLINT_EXCLUDE += src/node_dtrace.cc
CPPLINT_EXCLUDE += src/node_root_certs.h
CPPLINT_EXCLUDE += src/node_win32_perfctr_provider.cc
CPPLINT_EXCLUDE += src/queue.h
@@ -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,27 +356,35 @@ 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
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.

@@ -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
@@ -19,16 +19,11 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.


#include "util.h"
#include "node_dtrace.h"

#ifdef HAVE_DTRACE
#include "node_dtrace.h"
#include "node_provider.h"
#include <string.h>
#elif HAVE_ETW
#include "node_dtrace.h"
#include <string.h>
#include "node_win32_etw_provider.h"
#include "node_win32_etw_provider-inl.h"
#else
@@ -55,6 +50,10 @@
#include "env.h"
#include "env-inl.h"

#include "util.h"

#include <string.h>

namespace node {

using v8::FunctionCallbackInfo;
@@ -14,5 +14,6 @@ test-stdin-script-child : PASS,FLAKY
test-util-debug : PASS,FLAKY

[$system==macos]
test-fs-watch : PASS,FLAKY

[$system==solaris]
@@ -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');
});
@@ -31,16 +31,11 @@ var server = http.Server(function(req, res) {
req.on('data', function(chunk) {
result += chunk;
}).on('end', function() {
clearTimeout(timeout);
server.close();
res.writeHead(200);
res.end('hello world\n');
});

var timeout = setTimeout(function() {
process.exit(1);
}, 100);

res.writeHead(200);
res.end('hello world\n');
});

server.listen(common.PORT, function() {
@@ -34,10 +34,10 @@ var server = http.Server(function(req, res) {

req.on('end', function() {
server.close();
res.writeHead(200);
res.end('hello world\n');
});

res.writeHead(200);
res.end('hello world\n');
});

server.listen(common.PORT, function() {
@@ -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'],