platform/upstream/nodejs.git
10 years agobuffer: add compare and equals methods
Sean McArthur [Thu, 6 Mar 2014 18:21:04 +0000 (10:21 -0800)]
buffer: add compare and equals methods

compare() works like String.localeCompare such that:

    Buffer.compare(a, b) === a.compare(b);

equals() does a native check to see if two buffers are equal.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agovm: assign Environment to created context
Denys Zariaiev [Fri, 25 Apr 2014 12:06:06 +0000 (15:06 +0300)]
vm: assign Environment to created context

ContextifyContext::CreateV8Context is now create context
with Environment pointer

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agohttp: add request.flush() method
Ben Noordhuis [Wed, 9 Apr 2014 13:02:03 +0000 (15:02 +0200)]
http: add request.flush() method

Forcibly flushes the request headers.  You need this with long-lived
HTTP connections where the first data isn't written until the connection
has been established (think: tunneling requests over HTTP CONNECT.)

Fixes #7296.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agodeps: provide TXT chunk info in c-ares
Fedor Indutny [Thu, 27 Mar 2014 20:09:20 +0000 (00:09 +0400)]
deps: provide TXT chunk info in c-ares

Provide more information in `ares_txt_reply` to coalesce chunks from the
same record into one string.

fix #7367

10 years agodoc: tls: added path property to tls.connect
Farrin Reid [Sat, 15 Dec 2012 01:00:13 +0000 (17:00 -0800)]
doc: tls: added path property to tls.connect

In tls.connect a unix socket connection to a path may be made in
recent versions of node by specifying the value for the path
property.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agocrypto: fix memory leak in CipherBase::Final
Fedor Indutny [Tue, 22 Apr 2014 15:53:59 +0000 (19:53 +0400)]
crypto: fix memory leak in CipherBase::Final

fix #7497

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agocrypto: work around OpenSSL oddness
Fedor Indutny [Thu, 17 Apr 2014 23:53:15 +0000 (03:53 +0400)]
crypto: work around OpenSSL oddness

OpenSSL behaves oddly: on client `cert_chain` contains
the `peer_certificate`, but on server it doesn't.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agosrc: lint after OCSP commits
Fedor Indutny [Thu, 17 Apr 2014 22:24:48 +0000 (02:24 +0400)]
src: lint after OCSP commits

10 years agotls: `getPeerCertificate(detailed)`
Fedor Indutny [Thu, 17 Apr 2014 11:57:36 +0000 (15:57 +0400)]
tls: `getPeerCertificate(detailed)`

Add `raw` property to certificate, add mode to output full certificate
chain.

10 years agotls: support OCSP on client and server
Fedor Indutny [Mon, 14 Apr 2014 17:15:57 +0000 (21:15 +0400)]
tls: support OCSP on client and server

10 years agotls: set _connecting before starting the flow
Fedor Indutny [Mon, 14 Apr 2014 10:12:35 +0000 (14:12 +0400)]
tls: set _connecting before starting the flow

When creating a TLSSocket instance based on the existing connecting
socket, `_connecting` property is copied after the initialization of
`net.Socket`. However, since `net.Socket` constructor will call
`.read(0)` if the `readable` is true - error may happen at this code
chunk in net.js:

    Socket.prototype._read = function(n) {
      debug('_read');

      if (this._connecting || !this._handle) {
        debug('_read wait for connection');
        this.once('connect', this._read.bind(this, n));
    ...

Leading to a test failures on windows:

 - test/simple/test-tls-connect-given-socket.js

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agoevents: check if _events is an own property
Vladimir Kurchatkin [Thu, 3 Apr 2014 22:11:56 +0000 (02:11 +0400)]
events: check if _events is an own property

Without this check it is possible to have the _events object shared
amongst instances.

Fixes #7157

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agofs: return blksize on stats object
Trevor Norris [Mon, 14 Apr 2014 23:35:33 +0000 (16:35 -0700)]
fs: return blksize on stats object

Oversight to not pass blksize to fs.Stats on initialization.

Also added a test to make sure the object property has been set. Since
now on Windows both blksize and blocks will simply be set to undefined.

10 years agonet: deduplicate Socket.prototype.address
Yazhong Liu [Sun, 13 Apr 2014 17:19:14 +0000 (01:19 +0800)]
net: deduplicate Socket.prototype.address

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agonet: bind to `::` TCP address by default
Fedor Indutny [Sun, 13 Apr 2014 15:11:56 +0000 (19:11 +0400)]
net: bind to `::` TCP address by default

Try binding TCP socket to `::` first before falling back to
`0.0.0.0`.

10 years agomain: Handle SIGINT properly.
Geir Hauge [Mon, 31 Mar 2014 07:52:03 +0000 (09:52 +0200)]
main: Handle SIGINT properly.

As explained by http://www.cons.org/cracauer/sigint.html

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agobuffer: return uint if MSB is 1 in readUInt32
goussardg [Wed, 9 Apr 2014 23:39:31 +0000 (16:39 -0700)]
buffer: return uint if MSB is 1 in readUInt32

Fix issue where a signed integer is returned.

Example:

var b = new Buffer(4);
b.writeUInt32BE(0xffffffff);
b.readUInt32BE(0) == -1

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agobuffer: truncate buffer after string decode
Fedor Indutny [Thu, 27 Mar 2014 17:45:15 +0000 (21:45 +0400)]
buffer: truncate buffer after string decode

When our estimates for a storage size are higher than the actual length
of decoded data, the destination buffer should be truncated. Otherwise
`Buffer::Length` will give misleading information to C++ layer.

fix #7365

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agotest: remove vm-infinite-recursion
Fedor Indutny [Thu, 10 Apr 2014 20:53:47 +0000 (00:53 +0400)]
test: remove vm-infinite-recursion

It doesn't work reliably on all platforms.

see #7432

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agotest: add `reuseAddr` in dgram-multicast...
Fedor Indutny [Thu, 10 Apr 2014 15:55:38 +0000 (19:55 +0400)]
test: add `reuseAddr` in dgram-multicast...

Add `reuseAddr` option in `test-dgram-multicast-multi-process.js`

10 years agodgram: introduce `reuseAddr` option
Fedor Indutny [Tue, 8 Apr 2014 23:04:53 +0000 (03:04 +0400)]
dgram: introduce `reuseAddr` option

Introduce new signature for both `dgram.createSocket` method and
`dgram.Socket` constructor:

    dgram.createSocket(options, [listener])

Options should contain `type` property and may contain `reuseAddr`
property. When `reuseAddr` is `true` - SO_REUSEADDR will be issued on
socket on bind.

fix #7415

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agoopenssl: fix keypress requirement in apps on win32
Alexis Campailla [Tue, 4 Feb 2014 01:23:15 +0000 (17:23 -0800)]
openssl: fix keypress requirement in apps on win32

Re-applying commit 153784b3489e2feb9d93a3a5eee5a4aa34f74e39, which
was overwritten by the update to openssl 1.0.1f.

Original source:

http://openssl.6102.n7.nabble.com/PATCH-s-client-Fix-keypress-requirement-with-redirected-input-on-Windows-td46787.html

10 years agotest: fix test-crypto
Fedor Indutny [Tue, 8 Apr 2014 04:56:12 +0000 (08:56 +0400)]
test: fix test-crypto

10 years agoMerge branch 'v0.10'
Fedor Indutny [Tue, 8 Apr 2014 04:55:57 +0000 (08:55 +0400)]
Merge branch 'v0.10'

Conflicts:
deps/openssl/asm/x64-elf-gas/aes/vpaes-x86_64.s
deps/openssl/asm/x64-macosx-gas/aes/vpaes-x86_64.s
deps/openssl/asm/x64-win32-masm/aes/vpaes-x86_64.asm
deps/openssl/openssl/CHANGES
deps/openssl/openssl/Makefile
deps/openssl/openssl/Makefile.org
deps/openssl/openssl/NEWS
deps/openssl/openssl/README
deps/openssl/openssl/crypto/opensslv.h
deps/openssl/openssl/openssl.spec
deps/openssl/openssl/ssl/s23_clnt.c
lib/http.js
test/simple/test-http-client-readable.js

10 years agodeps: update openssl to 1.0.1g
Fedor Indutny [Mon, 7 Apr 2014 20:58:37 +0000 (00:58 +0400)]
deps: update openssl to 1.0.1g

10 years agohttp: do not emit EOF non-readable socket
Fedor Indutny [Fri, 24 Jan 2014 12:25:11 +0000 (16:25 +0400)]
http: do not emit EOF non-readable socket

Socket may become not `readable`, but http should not rely on this
property and should not think that it means that no data will ever
arrive from it. In fact, it may arrive in a next tick and, since
`this.push(null)` was already called, it will result in a error like
this:

    Error: stream.push() after EOF
        at readableAddChunk (_stream_readable.js:143:15)
        at IncomingMessage.Readable.push (_stream_readable.js:123:10)
        at HTTPParser.parserOnBody (_http_common.js:132:22)
        at Socket.socketOnData (_http_client.js:277:20)
        at Socket.EventEmitter.emit (events.js:101:17)
        at Socket.Readable.read (_stream_readable.js:367:10)
        at Socket.socketCloseListener (_http_client.js:196:10)
        at Socket.EventEmitter.emit (events.js:123:20)
        at TCP.close (net.js:479:12)

fix #6784

10 years agodoc: add missing space
Brian White [Mon, 7 Apr 2014 02:08:50 +0000 (22:08 -0400)]
doc: add missing space

Signed-off-by: Fedor Indutny <fedor@indutny.com>
10 years agosrc: fix use of uv_cwd, len includes the NULL byte
Saúl Ibarra Corretgé [Wed, 12 Mar 2014 23:22:50 +0000 (00:22 +0100)]
src: fix use of uv_cwd, len includes the NULL byte

10 years agosrc: update uv callbacks after API changes
Saúl Ibarra Corretgé [Wed, 12 Mar 2014 23:08:29 +0000 (00:08 +0100)]
src: update uv callbacks after API changes

async, timer, prepare, idle and check handles no longer get a status
parameter since they can never fail.

10 years agodeps: update libuv to v0.11.23
Fedor Indutny [Mon, 7 Apr 2014 12:36:51 +0000 (16:36 +0400)]
deps: update libuv to v0.11.23

10 years agoutil: made util.isArray a direct alias for Array.isArray
Evan Carroll [Wed, 2 Apr 2014 00:04:15 +0000 (19:04 -0500)]
util: made util.isArray a direct alias for Array.isArray

10 years agodomain: don't crash on "throw null"
Alex Kocharin [Tue, 24 Dec 2013 12:33:03 +0000 (16:33 +0400)]
domain: don't crash on "throw null"

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agodocs: correct tls docs. server -> client
Dominic Tarr [Sun, 30 Mar 2014 22:25:41 +0000 (11:25 +1300)]
docs: correct tls docs. server -> client

when a pfx file is passed to tls.connection,
it is the client private key, not the server's private key.

10 years agolib: use triple equals
Yuki KAN [Sat, 1 Mar 2014 02:09:29 +0000 (11:09 +0900)]
lib: use triple equals

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agonode: add signature to SET_PROTOTYPE_METHOD
C. Scott Ananian [Thu, 6 Mar 2014 20:44:18 +0000 (15:44 -0500)]
node: add signature to SET_PROTOTYPE_METHOD

This prevents segfaults when a native method is reassigned to a
different object (which corrupts args.This()).  When unwrapping,
clients should use args.Holder() instead of args.This().

Closes #6690.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agobuffer: improve {read,write}{U}Int* methods
Nick Apperson [Tue, 25 Mar 2014 14:51:13 +0000 (09:51 -0500)]
buffer: improve {read,write}{U}Int* methods

Increase the performance and simplify the logic of Buffer#write{U}Int*
and Buffer#read{U}Int* methods by placing the byte manipulation code
directly inline.

Also improve the speed of buffer-write benchmarks by creating a new
call directly to each method by using Function() instead of calling by
buff[fn].

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agosrc: fix up after v8 upgrade
Ben Noordhuis [Mon, 31 Mar 2014 13:13:37 +0000 (15:13 +0200)]
src: fix up after v8 upgrade

The two biggest changes are that v8::Script::New() has been removed and
that a v8::Script object now has to be explicitly bound to a context if
you want to run it from another context.

We can accommodate both changes without breaking the vm module's public
API or even the internal JS API.

10 years agodeps: fix up v8 postmortem codegen
Ben Noordhuis [Mon, 31 Mar 2014 13:07:59 +0000 (15:07 +0200)]
deps: fix up v8 postmortem codegen

Fix up overzealous parses, strip whitespace from class and field names.

10 years agodeps: upgrade v8 to 3.25.30
Ben Noordhuis [Mon, 31 Mar 2014 12:38:28 +0000 (14:38 +0200)]
deps: upgrade v8 to 3.25.30

10 years agotest: make test-smalloc endian aware
Andrew Low [Tue, 1 Apr 2014 14:18:09 +0000 (10:18 -0400)]
test: make test-smalloc endian aware

The test/simple/test-smalloc.js has an implicit assumption
of the byte order of the data stored for Double and Uint32
values. On a big endian platform this test fails without
these patches.

Use os.endianness() to detect the endian of the platform
and use it to gate the static value used for comparison.

10 years agov8: upgrade to 3.24.35.22
Trevor Norris [Tue, 1 Apr 2014 18:46:28 +0000 (11:46 -0700)]
v8: upgrade to 3.24.35.22

10 years agoconfigure: make --v8-options switch more robust
Ben Noordhuis [Mon, 31 Mar 2014 12:22:49 +0000 (14:22 +0200)]
configure: make --v8-options switch more robust

Improve on commit b55c9d6 by not requiring that switches are comma
separated.  This commit makes `./configure --v8-options="--foo --bar"`
work and takes special care to properly escape quotes in the options
string.

10 years agofs: improve performance of all stat functions
James Pickard [Thu, 27 Feb 2014 20:45:18 +0000 (15:45 -0500)]
fs: improve performance of all stat functions

By building the fs.Stats object in JS, which is returned by all fs stat
functions, calls to v8::Object::Set() are removed. This also includes
creating all associated Date objects in JS, rather than using
v8::Date::New(). Both these changes have significant performance gains.

Note that the returned value from fs.stat changes slightly for non-POSIX
systems. Whereas before the stats object would be missing blocks and
blksize keys, it now has these keys with undefined as the value.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
10 years agodoc: typo clean up in tls
Goh Yisheng (Andrew) [Sat, 29 Mar 2014 00:20:14 +0000 (08:20 +0800)]
doc: typo clean up in tls

10 years agocrypto: move `createCredentials` to tls
Fedor Indutny [Thu, 6 Mar 2014 23:27:01 +0000 (03:27 +0400)]
crypto: move `createCredentials` to tls

Move `createCredentials` to `tls` module and rename it to
`createSecureContext`. Make it use default values from `tls` module:
`DEFAULT_CIPHERS` and `DEFAULT_ECDH_CURVE`.

fix #7249

10 years agoconfigure: --v8-options option
Fedor Indutny [Wed, 26 Mar 2014 20:30:49 +0000 (00:30 +0400)]
configure: --v8-options option

Introduce a way to set some v8 flags at compile time, the values should
be separated by comma.

10 years agohttp: better client "protocol not supported" error
Nathan Rajlich [Tue, 25 Mar 2014 20:48:57 +0000 (10:48 -1000)]
http: better client "protocol not supported" error

Include the "expected protocol" in the Error message
string, which evaluates to "http:" for the `http`
core module, and "https:" for the `https` module.

Closes #7355.

10 years agodeps: apply floating patch to v8
dcarney@chromium.org [Mon, 24 Mar 2014 19:36:59 +0000 (19:36 +0000)]
deps: apply floating patch to v8

Original commit message below:

fix FunctionCallbackInfo ambiguity

- when compiling tools that embed v8 with g++ FunctionCallbackInfo is currently ambigous
- more info: https://github.com/joyent/node/issues/7337
- original patch is here: https://codereview.appspot.com/78770045/

TBR=svenpanne@chromium.org

Review URL: https://codereview.chromium.org/201573012

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@20217 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

10 years agotls: do not call SNICallback unless present
Fedor Indutny [Thu, 6 Mar 2014 22:25:38 +0000 (02:25 +0400)]
tls: do not call SNICallback unless present

When asynchronously parsing ClientHello for session resumption -
SNICallback may not be set. Check if it is present before invoking
it.

fix #7010

10 years agotls: force readable/writable to `true`
Fedor Indutny [Tue, 25 Feb 2014 16:38:33 +0000 (20:38 +0400)]
tls: force readable/writable to `true`

These are an old and deprecated properties that was used by previous
stream implementation, and are still in use in some user-land modules.

Prior to this commit, they were read from the underlying socket, which
may be non-readable/non-writable while connecting or while staying
uninitialized.

Force set them to `true`, just to make sure that there will be no
inconsistency.

fix #7152

10 years agobuild: windows signing should include timestamps
Josh Dague [Wed, 26 Mar 2014 05:26:17 +0000 (01:26 -0400)]
build: windows signing should include timestamps

Previously the build artifacts did not include a signed timestamp, so
when the certificate expired the validation of the artifact would fail.
Now we sign against a timestamp server such that the artifact will
always be valid regardless of the disposition of the certificate.

Closes #7360 and #7059.

10 years agocrypto: fix lint
Fedor Indutny [Wed, 26 Mar 2014 07:52:00 +0000 (11:52 +0400)]
crypto: fix lint

10 years agoMerge remote-tracking branch 'origin/v0.10'
Fedor Indutny [Wed, 26 Mar 2014 07:42:57 +0000 (11:42 +0400)]
Merge remote-tracking branch 'origin/v0.10'

Conflicts:
src/node.cc
src/node_crypto.cc
src/node_crypto.h

10 years agosrc: ensure that openssl's PRNG is fully seeded
Ben Noordhuis [Tue, 25 Mar 2014 22:35:28 +0000 (23:35 +0100)]
src: ensure that openssl's PRNG is fully seeded

Ensure that OpenSSL has enough entropy (at least 256 bits) for its PRNG.

The entropy pool starts out empty and needs to fill up before the PRNG
can be used securely.

OpenSSL normally fills the pool automatically but not when someone
starts generating random numbers before the pool is full: in that case
OpenSSL keeps lowering the entropy estimate to thwart attackers trying
to guess the initial state of the PRNG.

When that happens, we wait until enough entropy is available, something
that normally should never take longer than a few milliseconds.

Fixes #7338.

10 years agosrc: seed V8's random number generator at startup
Ben Noordhuis [Fri, 20 Sep 2013 20:01:49 +0000 (22:01 +0200)]
src: seed V8's random number generator at startup

The default entropy source is /dev/urandom on UNIX platforms, which is
okay but we can do better by seeding it from OpenSSL's entropy pool.

On Windows we can certainly do better; on that platform, V8 seeds the
random number generator using only the current system time.

Fixes #6250.

NB: This is a back-port of commit 7ac2391 from the master branch that
for some reason never got back-ported to the v0.10 branch.

The default on UNIX platforms in v0.10 is different and arguably worse
than it is with master: if no entropy source is provided, V8 3.14 calls
srandom() with a xor of the PID and the current time in microseconds.

That means that on systems with a coarse system clock, the initial
state of the PRNG may be easily guessable.

The situation on Windows is even more dire because there the PRNG is
seeded with only the current time... in milliseconds.

10 years agonpm: upgrade to 1.4.6
isaacs [Wed, 19 Mar 2014 16:25:40 +0000 (09:25 -0700)]
npm: upgrade to 1.4.6

* Documentation upgrades
* Fix glob bug which prevents proper README publishing
* node-gyp upgrade to 0.13
* Documentation updates
* Add --save-exact to save an exact dep (instead of a range)
* alias 't' to 'test'

10 years agodoc: remove `agent.request()` call in example
Nathan Rajlich [Tue, 25 Mar 2014 20:02:42 +0000 (10:02 -1000)]
doc: remove `agent.request()` call in example

The `Agent#request()` function was removed in
f3189ace6b5e31a874df421ac2f74da0e77cb14d, so don't
use it in the documentation example. The function
wasn't documented in the first place.

10 years agohttp: use defaultAgent.protocol in protocol check
Nathan Rajlich [Mon, 24 Mar 2014 22:59:31 +0000 (12:59 -1000)]
http: use defaultAgent.protocol in protocol check

Default to the `defaultAgent.protocol` when comparing the
user-specified `options.protocol` string. This is so that
`http.Agent` instances do not need to specify their own
`protocol` field, since we have the relevant information
already from the `defaultAgent`.

Note that the test case could be separately cherry-picked
to the `v0.10` branch, since it already passes correctly.

Fixes #7349.
Fixes the regression described in: http://git.io/2ds-WQ

10 years agobuild: fix g++ 4.8 build, disable -Werror
Ben Noordhuis [Thu, 6 Mar 2014 04:11:07 +0000 (05:11 +0100)]
build: fix g++ 4.8 build, disable -Werror

Turn off -Werror when building V8, it hits -Werror=unused-local-typedefs
with g++ 4.8.  The warning itself is harmless so don't abort the build.

This was originally implemented in commit d2ab314e back in 2011 but the
build process has gone through a few iterations since then, that change
no longer works.

10 years agovm: share security token between contexts
Fedor Indutny [Tue, 18 Mar 2014 10:03:22 +0000 (14:03 +0400)]
vm: share security token between contexts

By default, each `v8::Context` has a different Security Token, which
prevents access to one context from another.

fix #7140

10 years agopipe_wrap: use Instantiate() method
Trevor Norris [Mon, 17 Mar 2014 21:39:37 +0000 (14:39 -0700)]
pipe_wrap: use Instantiate() method

Retrieve a new client object via PipeWrap::Instantiate(). This method
performs appropriate checks to make sure everything is as it should be.

10 years agoheaders: remove env.h from node_internals.h
Fedor Indutny [Mon, 17 Mar 2014 20:46:40 +0000 (00:46 +0400)]
headers: remove env.h from node_internals.h

`env.h` is an internal header file and should not be copied or exposed
to the users.

Additionally, export convenience `Throw*` methods with `v8::Isolate*` as
a first argument.

10 years agodeps: update v8 to 3.24.35.17
Fedor Indutny [Mon, 17 Mar 2014 20:33:01 +0000 (00:33 +0400)]
deps: update v8 to 3.24.35.17

10 years agotest: update our branched weakref to v8 3.24
Timothy J Fontaine [Mon, 17 Mar 2014 17:19:47 +0000 (10:19 -0700)]
test: update our branched weakref to v8 3.24

10 years agosrc: fix tracing infrastructure after v8 upgrade
Ben Noordhuis [Sat, 15 Mar 2014 06:15:11 +0000 (07:15 +0100)]
src: fix tracing infrastructure after v8 upgrade

Fix up the dtrace/etw/systemtap infrastructure after the V8 upgrade in
commit 1c7bf24.  The win32 changes are untested but can hardly make
things worse because node doesn't build on windows right now.

Fixes #7313 with some luck.

10 years agosrc: don't call DecodeWrite() on Buffers
Ben Noordhuis [Sat, 15 Mar 2014 01:04:02 +0000 (02:04 +0100)]
src: don't call DecodeWrite() on Buffers

Don't call DecodeWrite() with a Buffer as its argument because it in
turn calls StringBytes::Write() and that method expects a Local<String>.

"Why then does that function take a Local<Value>?" I hear you ask.
Good question but I don't have the answer.  I added a CHECK for good
measure and what do you know, all of a sudden a large number of crypto
tests started failing.

Calling DecodeWrite(BINARY) on a buffer is nonsensical anyway: if you
want the contents of the buffer, just copy out the data, there is no
need to decode it - and that's exactly what this commit does.

Fixes a great many instances of the following run-time error in debug
builds:

    FATAL ERROR: v8::String::Cast() Could not convert to string

10 years agosrc: fix up smalloc weak persistent usage
Ben Noordhuis [Sat, 15 Mar 2014 00:12:53 +0000 (01:12 +0100)]
src: fix up smalloc weak persistent usage

Fix a regression that was introduced in commit ce04c726 after the
upgrade to V8 3.24.

The new weak persistent handle API no longer gives you the original
persistent but still requires that you clear it inside your weak
callback.

Rearrange the code in src/smalloc.cc to keep track of the persistent
handle with the least amount of pain and try hard to share as much
code as possible between the 'just free it' and 'invoke my callback'
versions of the smalloc API.

Fixes #7309.

10 years agosrc: add CHECK_{GE,GT,LE,LT} macros
Ben Noordhuis [Sat, 15 Mar 2014 00:25:53 +0000 (01:25 +0100)]
src: add CHECK_{GE,GT,LE,LT} macros

Conform to the Google styleguide more and make cpplint happy, add more
CHECK macros.

Preemptively addresses cpplint's readability/check warnings ("Consider
using CHECK_GT instead of CHECK(a > b)".)

10 years agosrc: deduplicate CHECK_EQ/CHECK_NE macros
Ben Noordhuis [Sat, 15 Mar 2014 00:23:47 +0000 (01:23 +0100)]
src: deduplicate CHECK_EQ/CHECK_NE macros

DRY the macros, there is no need to define them twice depending on
whether NDEBUG is defined or not.

10 years agosrc: fix segfaults, fix 32 bits integer negation
Ben Noordhuis [Fri, 14 Mar 2014 22:22:27 +0000 (23:22 +0100)]
src: fix segfaults, fix 32 bits integer negation

Make calls to v8::Isolate::AdjustAmountOfExternalAllocatedMemory() take
special care when negating 32 bits unsigned types like size_t.

Before this commit, values were negated before they got promoted to
64 bits, meaning that on 32 bits architectures, a value like 42 got
cast to 4294967254 instead of -42.

That in turn made the garbage collector start scavenging like crazy
because it thought the system was out of memory.

That's bad enough but calls to AdjustAmountOfExternalAllocatedMemory()
were made from weak callbacks, i.e. at a time when the garbage collector
was already busy.  It triggered asserts in debug builds and caused
random crashes and memory corruption in release builds.

The behavior in release builds is arguably a V8 bug and should perhaps
be reported upstream.

Partially fixes #7309 but requires further bug fixes to src/smalloc.cc
that I'll address in a follow-up commit.

10 years agosrc: squelch -Wmaybe-uninitialized warning
Ben Noordhuis [Fri, 14 Mar 2014 20:59:48 +0000 (21:59 +0100)]
src: squelch -Wmaybe-uninitialized warning

The variable isn't actually used uninitialized but g++ 4.8 doesn't know
that.  Set it to NULL to silence the following compiler warning:

    ../src/string_bytes.cc:247:29: warning: 'data' may be used
    uninitialized in this function [-Wmaybe-uninitialized]
         unsigned a = hex2bin(src[i * 2 + 0]);
                                  ^
    ../src/string_bytes.cc:299:15: note: 'data' was declared here
       const char* data;
                   ^

10 years agosrc: remove unused ExternString constructor
Ben Noordhuis [Fri, 14 Mar 2014 20:58:14 +0000 (21:58 +0100)]
src: remove unused ExternString constructor

Remove an unused (and unsafe) constructor.  Unsafe because it doesn't
initialize the data_ field.

10 years agosrc, test: fix up ObjectWrap, `make test-addons`
Ben Noordhuis [Thu, 13 Mar 2014 17:53:48 +0000 (18:53 +0100)]
src, test: fix up ObjectWrap, `make test-addons`

V8 was upgraded from 3.22 to 3.24 in commit 1c7bf24.  Upgrade source
files in test/addons/ and automatically generated tests from
doc/api/addons.markdown to the new V8 API.

This coincidentally fixes a bug in src/node_object_wrap.h where it was
still using the old V8 weak persistent handle interface, which is gone
in 3.24.

10 years agonode: fix exported signatures of MakeCallback
Fedor Indutny [Thu, 13 Mar 2014 17:13:59 +0000 (21:13 +0400)]
node: fix exported signatures of MakeCallback

fix #7302

10 years agodeps: allow allocations in gc epilogue/prologue
Fedor Indutny [Thu, 13 Mar 2014 16:47:02 +0000 (20:47 +0400)]
deps: allow allocations in gc epilogue/prologue

See https://codereview.chromium.org/177243012/

10 years agodeps: backport a6fed7c5 from v8's trunk
Fedor Indutny [Thu, 13 Mar 2014 16:46:23 +0000 (20:46 +0400)]
deps: backport a6fed7c5 from v8's trunk

10 years agosrc: update to v8 3.24 APIs
Fedor Indutny [Thu, 13 Mar 2014 16:38:14 +0000 (20:38 +0400)]
src: update to v8 3.24 APIs

10 years agodeps: update v8 to 3.24.40
Fedor Indutny [Thu, 13 Mar 2014 16:45:44 +0000 (20:45 +0400)]
deps: update v8 to 3.24.40

10 years agoreadline: consider newlines for cursor position
Yazhong Liu [Sun, 9 Mar 2014 06:46:54 +0000 (14:46 +0800)]
readline: consider newlines for cursor position

Fixes #7266.
Closes #7279.

10 years agoNow working on 0.11.13
Timothy J Fontaine [Wed, 12 Mar 2014 14:56:42 +0000 (07:56 -0700)]
Now working on 0.11.13

10 years agoMerge branch 'v0.11.12-release'
Timothy J Fontaine [Wed, 12 Mar 2014 14:56:30 +0000 (07:56 -0700)]
Merge branch 'v0.11.12-release'

10 years agosrc: accommodate uv_cwd including null on win32 v0.11.12
Timothy J Fontaine [Tue, 11 Mar 2014 21:49:48 +0000 (14:49 -0700)]
src: accommodate uv_cwd including null on win32

10 years ago2014.03.11, Version 0.11.12 (Unstable)
Timothy J Fontaine [Tue, 11 Mar 2014 20:49:52 +0000 (13:49 -0700)]
2014.03.11, Version 0.11.12 (Unstable)

* uv: Upgrade to v0.11.22 (Timothy J Fontaine)

* buffer: allow toString to accept Infinity for end (Brian White)

* child_process: add spawnSync/execSync (Bert Belder, Timothy J Fontaine)

* cluster: handle bind errors on Windows (Alexis Campailla)

* contextify: handle infinite recursion errors (Fedor Indutny)

* crypto: allow custom generator for DiffieHellman (Brian White)

* crypto: allow setting add'l authenticated data (Brian White)

* crypto: fix CipherFinal return value check (Brian White)

* crypto: make NewSessionDoneCb public (Fedor Indutny)

* dgram: pass the bytes sent to the send callback (Timothy J Fontaine)

* dns: validate arguments in resolver (Kenan Sulayman)

* dns: verify argument is valid function in resolve (Kenan Sulayman)

* http: avoid duplicate keys in writeHead (David Björklund)

* net: add localPort to connect options (Timothy J Fontaine)

* node: do not print SyntaxError hints to stderr (Fedor Indutny)

* node: invoke `beforeExit` again if loop was active (Fedor Indutny)

* node: make AsyncListenerInst field more explicit (Trevor Norris)

* os: networkInterfaces include scopeid for ipv6 (Xidorn Quan)

* process: allow changing `exitCode` in `on('exit')` (Fedor Indutny)

* readline: fix `line` event, if input emit 'end' (Yazhong Liu)

* src: add tracing.v8.on('gc') statistics hooks (Ben Noordhuis)

* src: add v8.getHeapStatistics() function (Ben Noordhuis)

* src: emit 'beforeExit' event on process object (Ben Noordhuis)

* src: move AsyncListener from process to tracing (Trevor Norris)

* tls: fix crash in SNICallback (Fedor Indutny)

* tls: introduce asynchronous `newSession` (Fedor Indutny)

* util: show meaningful values for boxed primitives (Nathan Rajlich)

* vm: don't copy Proxy object from parent context (Ben Noordhuis)

* windows: make stdout/sterr pipes blocking (Alexis Campailla)

* zlib: add sync versions for convenience methods (Nikolai Vavilov)

10 years agomdb_v8: update to latest version
Bryan Cantrill [Tue, 11 Mar 2014 01:07:52 +0000 (18:07 -0700)]
mdb_v8: update to latest version

 * ::jsstack -v prints function defintion
 * ::jsprint works with objects with only numeric properties
 * update tests to use builtin mdb_v8
 * add more symbols to postmortem script - pending upstream
   inclusion

10 years agosrc: update from uv_read2_start removal
Timothy J Fontaine [Tue, 11 Mar 2014 00:51:47 +0000 (17:51 -0700)]
src: update from uv_read2_start removal

Previously if you wanted to be notified of pending handles for pipes
you needed to use uv_read2_start, however in v0.11.22 you can query for
pending handles independently.

10 years agosrc: adapt to API change in uv_cwd
Saúl Ibarra Corretgé [Sun, 2 Mar 2014 22:18:26 +0000 (23:18 +0100)]
src: adapt to API change in uv_cwd

10 years agouv: Upgrade to v0.11.22
Timothy J Fontaine [Tue, 11 Mar 2014 00:01:21 +0000 (17:01 -0700)]
uv: Upgrade to v0.11.22

10 years agoMerge remote-tracking branch 'upstream/v0.10'
Timothy J Fontaine [Mon, 10 Mar 2014 23:50:00 +0000 (16:50 -0700)]
Merge remote-tracking branch 'upstream/v0.10'

Conflicts:
src/node.cc
src/node.js
test/message/max_tick_depth_trace.out

10 years agodoc: remove an unused arg in process.stdin.
Shuhei Kagawa [Sun, 9 Mar 2014 11:16:39 +0000 (20:16 +0900)]
doc: remove an unused arg in process.stdin.

The argument of process.stdin's readable event handler is not used.

10 years agocrypto: do not lowercase cipher/hash names
Fedor Indutny [Mon, 10 Mar 2014 10:59:18 +0000 (14:59 +0400)]
crypto: do not lowercase cipher/hash names

`crypto.getCiphers()` and `crypto.getHashes()` should prefer lower-case
variants of names, but should not introduce them.

fix #7282

10 years agotest: timers-ordering should be more precise
Timothy J Fontaine [Mon, 10 Mar 2014 21:01:24 +0000 (14:01 -0700)]
test: timers-ordering should be more precise

Internally we use hrtime to schedule when a timer will fire, to avoid
the perils of clock drift or other external operation making time go
backward. The timers ordering test should use the same timing mechanism

10 years agobuffer: fix typo in `SlowBuffer`
Vladimir Kurchatkin [Sat, 8 Mar 2014 14:52:51 +0000 (18:52 +0400)]
buffer: fix typo in `SlowBuffer`

10 years agobuffer: allow toString to accept Infinity for end
Brian White [Sun, 9 Mar 2014 20:46:54 +0000 (16:46 -0400)]
buffer: allow toString to accept Infinity for end

10 years agodeps: fix v8 valgrind warning
Ben Noordhuis [Thu, 6 Mar 2014 21:59:56 +0000 (22:59 +0100)]
deps: fix v8 valgrind warning

Fix the following valgrind warning:

    Conditional jump or move depends on uninitialised value(s)
        at 0x7D64E7: v8::internal::GlobalHandles::IterateAllRootsWithClassIds(v8::internal::ObjectVisitor*) (global-handles.cc:613)
        by 0x94DCDC: v8::internal::NativeObjectsExplorer::FillRetainedObjects() (profile-generator.cc:2849)
        # etc.

This was fixed upstream in r12903 and released in 3.15.2 but that commit
was never back-ported to the 3.14 branch that node.js v0.10 uses.

The code itself works okay; this commit simply shuffles the clauses in
an `if` statement to check that the node is in use before checking its
class id (which is uninitialized if the node is not in use.)

10 years agochild_process: fix sending handle twice
Fedor Indutny [Wed, 26 Feb 2014 10:37:13 +0000 (14:37 +0400)]
child_process: fix sending handle twice

When sending a socket to a child process via IPC pipe,
`child_process.js` picks a raw UV handle from `_handle` property, sends
it, and assigns `null` to the property. Sending the same socket twice
was resulting in a runtime error, since we weren't handling the empty
`_handle` case.

In case of `null` `_handle` we should send just a plain text message
as passed it was passed to `.send()` and ignore the handle, letting
users handle such cases themselves instead of throwing the error at
runtime.

fix #5469

10 years agotest: test sending a handle twice
Benoit Vallée [Tue, 14 May 2013 03:10:07 +0000 (11:10 +0800)]
test: test sending a handle twice

Added test-cluster-send-handle-twice.js testing to send a handle
twice to the parent process.

10 years agosrc: add default visibility to NODE_MODULE
Ben Noordhuis [Tue, 4 Mar 2014 13:10:05 +0000 (14:10 +0100)]
src: add default visibility to NODE_MODULE

It's currently not really possible to compile native add-ons with
-fvisibility=hidden because that also hides the struct containing
the module definition.

The NODE_MODULE() and NODE_MODULE_DECL() macros are structured in
a way that makes it impossible to add a visibility attribute manually
so there is no escape hatch there.

That's why this commit adds an explicit visibility attribute to
the module definition.  It doesn't help with node.js releases that
are already out there but at least it improves the situation going
forward.

10 years agocrypto: allow setting add'l authenticated data
Brian White [Tue, 4 Mar 2014 05:05:23 +0000 (00:05 -0500)]
crypto: allow setting add'l authenticated data

10 years agocrypto: fix CipherFinal return value check
Brian White [Mon, 3 Mar 2014 05:25:11 +0000 (00:25 -0500)]
crypto: fix CipherFinal return value check

10 years agotimer: don't reschedule timer bucket in a domain
Greg Brail [Wed, 29 Jan 2014 01:36:22 +0000 (17:36 -0800)]
timer: don't reschedule timer bucket in a domain

If two timers run on the same tick, and the first timer uses a domain,
and then catches an exception and disposes of the domain, then the
second timer never runs. (And even if the first timer does not dispose
of the domain, the second timer could run under the wrong domain.)

This happens because timer.js uses "process.nextTick()" to schedule
continued processing of the timers for that tick. However, there was
an exception inside a domain, then "process.nextTick()" runs under
the domain of the first timer function, and will do nothing if
the domain has been disposed.

To avoid this, we temporarily save the value of "process.domain"
before calling nextTick so that it does not run inside any domain.