platform/upstream/nodejs.git
11 years agovm: Put back display_errors flag
isaacs [Thu, 22 Aug 2013 00:19:41 +0000 (17:19 -0700)]
vm: Put back display_errors flag

This is an important part of the repl use-case.

TODO: The arg parsing in vm.runIn*Context() is rather wonky.
It would be good to move more of that into the Script class,
and/or an options object.

11 years agovm, core, module: re-do vm to fix known issues
Domenic Denicola [Sat, 27 Jul 2013 04:34:12 +0000 (00:34 -0400)]
vm, core, module: re-do vm to fix known issues

As documented in #3042 and in [1], the existing vm implementation has
many problems. All of these are solved by @brianmcd's [contextify][2]
package. This commit uses contextify as a conceptual base and its code
core to overhaul the vm module and fix its many edge cases and caveats.

Functionally, this fixes #3042. In particular:

- A context is now indistinguishable from the object it is based on
  (the "sandbox"). A context is simply a sandbox that has been marked
  by the vm module, via `vm.createContext`, with special internal
  information that allows scripts to be run inside of it.
- Consequently, items added to the context from anywhere are
  immediately visible to all code that can access that context, both
  inside and outside the virtual machine.

This commit also smooths over the API very slightly:

- Parameter defaults are now uniformly triggered via `undefined`, per
  ES6 semantics and previous discussion at [3].
- Several undocumented and problematic features have been removed, e.g.
  the conflation of `vm.Script` with `vm` itself, and the fact that
  `Script` instances also had all static `vm` methods. The API is now
  exactly as documented (although arguably the existence of the
  `vm.Script` export is not yet documented, just the `Script` class
  itself).

In terms of implementation, this replaces node_script.cc with
node_contextify.cc, which is derived originally from [4] (see [5]) but
has since undergone extensive modifications and iterations to expose
the most useful C++ API and use the coding conventions and utilities of
Node core.

The bindings exposed by `process.binding('contextify')`
(node_contextify.cc) replace those formerly exposed by
`process.binding('evals')` (node_script.cc). They are:

- ContextifyScript(code, [filename]), with methods:
  - runInThisContext()
  - runInContext(sandbox, [timeout])
- makeContext(sandbox)

From this, the vm.js file builds the entire documented vm module API.

node.js and module.js were modified to use this new native binding, or
the vm module itself where possible. This introduces an extra line or
two into the stack traces of module compilation (and thus into most
stack traces), explaining the changed tests.

The tests were also updated slightly, with all vm-related simple tests
consolidated as test/simple/test-vm-* (some of them were formerly
test/simple/test-script-*). At the same time they switched from
`common.debug` to `console.error` and were updated to use
`assert.throws` instead of rolling their own error-testing methods.

New tests were also added, of course, demonstrating the new
capabilities and fixes.

[1]: http://nodejs.org/docs/v0.10.16/api/vm.html#vm_caveats
[2]: https://github.com/brianmcd/contextify
[3]: https://github.com/joyent/node/issues/5323#issuecomment-20250726
[4]: https://github.com/kkoopa/contextify/blob/bf123f3ef960f0943d1e30bda02e3163a004e964/src/contextify.cc
[5]: https://gist.github.com/domenic/6068120

11 years agoNow working on 0.11.7
Timothy J Fontaine [Wed, 21 Aug 2013 21:16:46 +0000 (14:16 -0700)]
Now working on 0.11.7

11 years agoMerge branch 'v0.11.6-release'
Timothy J Fontaine [Wed, 21 Aug 2013 21:16:29 +0000 (14:16 -0700)]
Merge branch 'v0.11.6-release'

11 years ago2013.08.21, Version 0.11.6 (Unstable) v0.11.6
Timothy J Fontaine [Wed, 21 Aug 2013 20:20:50 +0000 (13:20 -0700)]
2013.08.21, Version 0.11.6 (Unstable)

* uv: Upgrade to v0.11.8

* v8: upgrade v8 to 3.20.14.1

* build: disable SSLv2 by default (Ben Noordhuis)

* build: don't auto-destroy existing configuration (Ben Noordhuis)

* crypto: add TLS 1.1 and 1.2 to secureProtocol list (Matthias Bartelmeß)

* crypto: fix memory leak in randomBytes() error path (Ben Noordhuis)

* dgram: don't call into js when send cb is omitted (Ben Noordhuis)

* dgram: fix regression in string argument handling (Ben Noordhuis)

* domains: performance improvements (Trevor Norris)

* events: EventEmitter = require('events') (Jake Verbaten)

* http: Add write()/end() callbacks (isaacs)

* http: Consistent 'finish' event semantics (isaacs)

* http: Prefer 'binary' over 'ascii' (isaacs)

* http: Support legacy agent.addRequest API (isaacs)

* http: Write hex/base64 chunks properly (isaacs)

* http: add agent.maxFreeSockets option (isaacs)

* http: provide access to raw headers/trailers (isaacs)

* http: removed headers stay removed (James Halliday)

* http,timers: improve callback performance (Ben Noordhuis)

* net: family option in net.connect (Vsevolod Strukchinsky)

* readline: pause stdin before turning off terminal raw mode (Daniel Chatfield)

* smalloc: allow different external array types (Trevor Norris)

* smalloc: expose ExternalArraySize (Trevor Norris)

* stream: Short-circuit buffer pushes when flowing (isaacs)

* tls: handle errors on socket before releasing it (Fedor Indutny)

* util: fix isPrimitive check (Trevor Norris)

* util: isObject should always return boolean (Trevor Norris)

11 years agouv: Upgrade to v0.11.8
Timothy J Fontaine [Wed, 21 Aug 2013 18:15:21 +0000 (11:15 -0700)]
uv: Upgrade to v0.11.8

11 years agotest: net-GH-5504 child env needs NODE_COMMON_PORT
Timothy J Fontaine [Wed, 21 Aug 2013 17:51:42 +0000 (10:51 -0700)]
test: net-GH-5504 child env needs NODE_COMMON_PORT

11 years agoMerge remote-tracking branch 'ry/v0.10'
isaacs [Wed, 21 Aug 2013 16:40:10 +0000 (09:40 -0700)]
Merge remote-tracking branch 'ry/v0.10'

Conflicts:
lib/tls.js

11 years agotest: fix test failure on linux after edd2fcc
Fedor Indutny [Wed, 21 Aug 2013 08:33:09 +0000 (12:33 +0400)]
test: fix test failure on linux after edd2fcc

11 years agodeps: upgrade http_parser to 303c4e4
Ben Noordhuis [Wed, 21 Aug 2013 01:33:20 +0000 (03:33 +0200)]
deps: upgrade http_parser to 303c4e4

Upgrade to joyent/http-parser@303c4e4. Changes:

  * Do not accept PUN/GEM methods as PUT/GET.
  * Further request method check strengthening.

11 years agotls: fix assertion when ssl is destroyed at read
Fedor Indutny [Wed, 21 Aug 2013 11:58:33 +0000 (15:58 +0400)]
tls: fix assertion when ssl is destroyed at read

`maybeInitFinished()` can emit the 'secure' event which
in turn destroys the connection in case of authentication
failure and sets `this.pair.ssl` to `null`.

If such condition appeared after non-empty read - loop will continue
and `clearOut` will be called on `null` object instead of
`crypto::Connection` instance. Resulting in the following assertion:

    ERROR: Error: Hostname/IP doesn't match certificate's altnames
    Assertion failed: handle->InternalFieldCount() > 0

fix #5756

11 years agosmalloc: consistent-ify syntax
Trevor Norris [Tue, 20 Aug 2013 17:55:42 +0000 (10:55 -0700)]
smalloc: consistent-ify syntax

Small syntax fixes of variable renaming and argument alignment.

11 years agosmalloc: length is byte size, not array length
Trevor Norris [Tue, 20 Aug 2013 17:30:40 +0000 (10:30 -0700)]
smalloc: length is byte size, not array length

The C++ API has been changed so the passed length is the byte size of
the data, not the length of the array.

This was done so users need to explicitly define how much memory they
want allocated.

11 years agosmalloc: expose ExternalArraySize
Trevor Norris [Tue, 20 Aug 2013 17:12:29 +0000 (10:12 -0700)]
smalloc: expose ExternalArraySize

Useful to correctly determine the byte size of the external memory that
needs to be allocated for an external array.

11 years agoutil: isObject should always return boolean
Trevor Norris [Tue, 20 Aug 2013 18:05:36 +0000 (11:05 -0700)]
util: isObject should always return boolean

Fix small bug where isObject would return the original object instead of
true.

11 years agonet: family option in net.connect
Vsevolod Strukchinsky [Tue, 20 Aug 2013 12:31:40 +0000 (18:31 +0600)]
net: family option in net.connect

`dns.lookup` defaults to selecting IPv4 record even if IPv6 is available
for the desired zone. Generally, this approach works, but if IPv4
address is unavailable - there'll be no other way to opt-out and connect using
IPv6 address than calling `dns.lookup` and passing it to `.connect()`
directly.

This commit adds `family` option to `net.connect` method to figure out
this issue.

11 years agofs: use correct self reference for autoClose test
Gil Pedersen [Tue, 20 Aug 2013 13:53:54 +0000 (15:53 +0200)]
fs: use correct self reference for autoClose test

11 years agodoc: Minor typos in dgram doc
isaacs [Tue, 20 Aug 2013 00:55:58 +0000 (17:55 -0700)]
doc: Minor typos in dgram doc

a/an usage.  Thanks @KenanSulayman

11 years agotest: Remove unnecessary assertion
isaacs [Tue, 20 Aug 2013 00:43:38 +0000 (17:43 -0700)]
test: Remove unnecessary assertion

It only fails once in about 1000 times, but that's too many.
It's timing dependent, and the main behavior is covered by the other
assertions in the test anyway.

11 years agoevents: have events module exports EventEmitter
Raynos [Mon, 13 May 2013 19:04:06 +0000 (13:04 -0600)]
events: have events module exports EventEmitter

This change is 100% backwards compatible.

This change will make using `EventEmitter` slightly simpler / nicer and
adheres to the best practice set forth by substack.

```js
var EventEmitter = require("events")

var emitter = new EventEmitter()
```

The only difference is that we now have to set `EventEmitter` as a
property of `EventEmitter` for backwards compatibility like we do with
[`Stream`][1]

We have also set the `usingDomains` property on the `EventEmitter`
constructor itself because that aligns with it's current usage of
`require("events").usingDomains = true`

There are other internals that would benefit from this change as well
like `StringDecoder`

11 years agofixes #6031 spelling errors
Matthew Aynalem [Mon, 12 Aug 2013 22:01:05 +0000 (15:01 -0700)]
fixes #6031 spelling errors

explictly => explicitly
accesss => access
througput => throughput
epxression => expression
communiction => communication
becuase => because
repersent => represent
condonitions => conditions
decompresion => decompression
intentially => intentionally
eventes => events
listning => listening
resicved => received
becuase => because
fundimental => fundamental
colapse => collapse
privlages => privileges
sufficently => sufficiently
hapepns => happens
expliclitly => explicitly
thier => their
shold => should

11 years agodoc: Add callback parameter to dgram socket.bind()
Duan Yao [Tue, 4 Dec 2012 10:12:10 +0000 (18:12 +0800)]
doc: Add callback parameter to dgram socket.bind()

Also, describe more details of bind().

11 years agodoc: fixed syntax error in stream.Transform
ChrisWren [Sun, 11 Aug 2013 19:30:03 +0000 (12:30 -0700)]
doc: fixed syntax error in stream.Transform

11 years agohttp: removed headers stay removed
James Halliday [Mon, 10 Sep 2012 02:04:37 +0000 (19:04 -0700)]
http: removed headers stay removed

This allows automatically-inserted headers to be removed permanently by
calling OutgoingMessage.removeHeader() on them, as if they were normal
headers.

11 years agoAdded documentation for process.execArgv
Edward Hutchins [Thu, 23 May 2013 01:04:36 +0000 (18:04 -0700)]
Added documentation for process.execArgv

11 years agodoc: add missing word in Transform stream intro
Eivind Uggedal [Thu, 4 Jul 2013 16:52:14 +0000 (18:52 +0200)]
doc: add missing word in Transform stream intro

11 years agoMerge remote-tracking branch 'ry/v0.10'
isaacs [Mon, 19 Aug 2013 21:15:03 +0000 (14:15 -0700)]
Merge remote-tracking branch 'ry/v0.10'

11 years agobuffer: lint
Trevor Norris [Mon, 19 Aug 2013 18:15:16 +0000 (11:15 -0700)]
buffer: lint

This and b80d11d are my fault. An unrelated test was failing, which
prevents {js,cpp}lint from running automatically.

11 years agobuffer: lint
Fedor Indutny [Mon, 19 Aug 2013 16:41:24 +0000 (20:41 +0400)]
buffer: lint

11 years agocrypto: don't touch ssl_ in Connection
Fedor Indutny [Mon, 19 Aug 2013 16:34:34 +0000 (20:34 +0400)]
crypto: don't touch ssl_ in Connection

`ssl_` is a property of SSLWrap class, don't touch it, and definitely
don't zero it in constructor.

11 years agostream: Throw on 'error' if listeners removed
isaacs [Mon, 19 Aug 2013 14:59:39 +0000 (07:59 -0700)]
stream: Throw on 'error' if listeners removed

In this situation:

    writable.on('error', handler);
    readable.pipe(writable);
    writable.removeListener('error', handler);
    writable.emit('error', new Error('boom'));

there is actually no error handler, but it doesn't throw, because of the
fix for stream.once('error', handler), in 23d92ec.

Note that simply reverting that change is not valid either, because
otherwise this will emit twice, being handled the first time, and then
throwing the second:

    writable.once('error', handler);
    readable.pipe(writable);
    writable.emit('error', new Error('boom'));

Fix this with a horrible hack to make the stream pipe onerror handler
added before any other userland handlers, so that our handler is not
affected by adding or removing any userland handlers.

Closes #6007.

11 years agotls, crypto: deduplicate code
Fedor Indutny [Thu, 15 Aug 2013 15:28:26 +0000 (19:28 +0400)]
tls, crypto: deduplicate code

Commit 03e008d introduced src/tls_wrap.cc and src/tls_wrap.h but
said files copied on the order of 1 kLoC from src/node_crypto.cc
and src/node_crypto.h.  This commit undoes some of the duplication.

Fixes #6024.

11 years agosrc: move includes inside include guard
Ben Noordhuis [Mon, 19 Aug 2013 14:39:04 +0000 (16:39 +0200)]
src: move includes inside include guard

Having the includes in src/node_buffer.h outside of the include guard
is not really harmful but it's inconsistent with other header files.

11 years agoMerge remote-tracking branch 'ry/v0.10'
isaacs [Sat, 17 Aug 2013 20:57:41 +0000 (13:57 -0700)]
Merge remote-tracking branch 'ry/v0.10'

Conflicts:
AUTHORS
ChangeLog
lib/dgram.js
lib/http.js
src/node_crypto.cc
src/node_version.h

11 years agodgram: fix assertion on bad send() arguments
Ben Noordhuis [Fri, 9 Aug 2013 00:33:40 +0000 (02:33 +0200)]
dgram: fix assertion on bad send() arguments

Add range checks for the offset, length and port arguments to
dgram.Socket#send().  Fixes the following assertion:

    node: ../../src/udp_wrap.cc:264: static v8::Handle<v8::Value>
    node::UDPWrap::DoSend(const v8::Arguments&, int): Assertion
    `offset < Buffer::Length(buffer_obj)' failed.

And:

    node: ../../src/udp_wrap.cc:265: static v8::Handle<v8::Value>
    node::UDPWrap::DoSend(const v8::Arguments&, int): Assertion
    `length <= Buffer::Length(buffer_obj) - offset' failed.

Interestingly enough, a negative port number was accepted until now but
silently ignored.  (In other words, it would send the datagram to a
random port.)

This commit exposed a bug in the simple/test-dgram-close test which
has also been fixed.

This is a back-port of commit 41ec6d0 from the master branch.

Fixes #6025.

11 years agoreadline: pause stdin before turning off terminal raw mode
Daniel Chatfield [Tue, 30 Jul 2013 13:43:31 +0000 (14:43 +0100)]
readline: pause stdin before turning off terminal raw mode

On windows, libuv will immediately make a `ReadConsole` call (in the
thread pool) when a 'flowing' `uv_tty_t` handle is switched to
line-buffered mode. That causes an immediate issue for some users,
since libuv can't cancel the `ReadConsole` operation on Windows 8 /
Server 2012 and up if the program switches back to raw mode later.

But even if this will be fixed in libuv at some point, it's better to
avoid the overhead of starting work in the thread pool and immediately
cancelling it afther that.

See also f34f1e3, where the same change is made for the opposite
flow, e.g. move `resume()` after `_setRawMode(true)`.

Fixes #5927

This is a backport of dfb0461 (see #5930) to the v0.10 branch.

11 years agoreadline: pause stdin before turning off terminal raw mode
Daniel Chatfield [Tue, 30 Jul 2013 13:43:31 +0000 (14:43 +0100)]
readline: pause stdin before turning off terminal raw mode

On windows, libuv will immediately make a `ReadConsole` call (in the
thread pool) when a 'flowing' `uv_tty_t` handle is switched to
line-buffered mode. That causes an immediate issue for some users,
since libuv can't cancel the `ReadConsole` operation on Windows 8 /
Server 2012 and up if the program switches back to raw mode later.

But even if this will be fixed in libuv at some point, it's better to
avoid the overhead of starting work in the thread pool and immediately
cancelling it afther that.

See also f34f1e3, where the same change is made for the opposite
flow, e.g. move `resume()` after `_setRawMode(true)`.

Fixes #5927
Closes #5930

11 years agoblog: v0.10.16
isaacs [Fri, 16 Aug 2013 19:47:54 +0000 (12:47 -0700)]
blog: v0.10.16

11 years agoNow working on v0.10.17
isaacs [Fri, 16 Aug 2013 19:47:29 +0000 (12:47 -0700)]
Now working on v0.10.17

11 years agoMerge branch 'v0.10.16-release' into v0.10
isaacs [Fri, 16 Aug 2013 19:46:56 +0000 (12:46 -0700)]
Merge branch 'v0.10.16-release' into v0.10

11 years agobuffer: don't call ByteLength for simple encodings
Trevor Norris [Fri, 16 Aug 2013 18:32:56 +0000 (11:32 -0700)]
buffer: don't call ByteLength for simple encodings

For several encodings the byte length is simple arithmetic. Don't call
into C++ in those cases.

11 years ago2013.08.16, Version 0.10.16 (Stable) v0.10.16
isaacs [Fri, 16 Aug 2013 15:31:10 +0000 (08:31 -0700)]
2013.08.16, Version 0.10.16 (Stable)

* v8: back-port fix for CVE-2013-2882

* npm: Upgrade to 1.3.8

* crypto: fix assert() on malformed hex input (Ben Noordhuis)

* crypto: fix memory leak in randomBytes() error path (Ben Noordhuis)

* events: fix memory leak, don't leak event names (Ben Noordhuis)

* http: Handle hex/base64 encodings properly (isaacs)

* http: improve chunked res.write(buf) performance (Ben Noordhuis)

* stream: Fix double pipe error emit (Eran Hammer)

11 years agonpm: Upgrade to 1.3.8
isaacs [Fri, 16 Aug 2013 15:19:31 +0000 (08:19 -0700)]
npm: Upgrade to 1.3.8

11 years agocrypto: fix memory leak in randomBytes() error path
Ben Noordhuis [Fri, 16 Aug 2013 14:49:00 +0000 (16:49 +0200)]
crypto: fix memory leak in randomBytes() error path

This is the conceptual back-port of commit ec54873 from the master
branch.

11 years agocrypto: fix memory leak in randomBytes() error path
Ben Noordhuis [Fri, 16 Aug 2013 14:42:50 +0000 (16:42 +0200)]
crypto: fix memory leak in randomBytes() error path

11 years agocrypto: don't mix new[] and free()
Ben Noordhuis [Fri, 16 Aug 2013 14:36:21 +0000 (16:36 +0200)]
crypto: don't mix new[] and free()

RandomBytes() allocated memory with new[] which was then handed off to
Buffer::Use() which eventually releases it again with free().

Mixing the two is technically a violation of the spec and besides, it's
generally frowned upon.

11 years agotest: Remove hard-coded port
isaacs [Fri, 16 Aug 2013 00:39:28 +0000 (17:39 -0700)]
test: Remove hard-coded port

11 years agocluster: variable is not global
Brian White [Thu, 15 Aug 2013 21:56:25 +0000 (17:56 -0400)]
cluster: variable is not global

11 years agobuffer: remove unused parameters
Brian White [Thu, 15 Aug 2013 21:55:35 +0000 (17:55 -0400)]
buffer: remove unused parameters

11 years agolib: remove unused variables and functions
Brian White [Thu, 15 Aug 2013 21:55:05 +0000 (17:55 -0400)]
lib: remove unused variables and functions

11 years agohttp: Prefer 'binary' over 'ascii'
isaacs [Thu, 15 Aug 2013 21:55:43 +0000 (14:55 -0700)]
http: Prefer 'binary' over 'ascii'

It's faster, because it doesn't have to check that each char is in the
ASCII plane.

11 years agohttp: Simplify IncomingMessage._dump method
isaacs [Thu, 15 Aug 2013 18:15:10 +0000 (11:15 -0700)]
http: Simplify IncomingMessage._dump method

11 years agohttp: Consistent 'finish' event semantics
isaacs [Thu, 15 Aug 2013 18:08:19 +0000 (11:08 -0700)]
http: Consistent 'finish' event semantics

In other Writable streams, the 'finish' event means that all of the data
was written, and flushed to the underlying system.

The 'prefinish' event means that end() was called, and all of the data
was processed, but not necessarily completely flushed.

This change brings the http OutgoingMessage classes more in sync with
the other Writable classes throughout Node.

Unfortunately, this change highlights an issue with http
IncomingMessages, where the _dump() method will not actually pull the
data off the wire.  This is a minor issue that is typically only
relevant in test cases, and will be addressed in the next commit.

11 years agohttp: make OutgoingMessage._flush inline-able
isaacs [Thu, 15 Aug 2013 15:54:49 +0000 (08:54 -0700)]
http: make OutgoingMessage._flush inline-able

11 years agohttp: Add write()/end() callbacks
isaacs [Thu, 15 Aug 2013 15:51:37 +0000 (08:51 -0700)]
http: Add write()/end() callbacks

11 years agohttp: Write hex/base64 chunks properly
isaacs [Thu, 15 Aug 2013 05:14:49 +0000 (22:14 -0700)]
http: Write hex/base64 chunks properly

This removes a dubious performance "optimization" where strings body
chunks were concatenated to one another (and to the headers) without any
regard for their encoding.

11 years agohttp: Handle hex/base64 encodings properly
isaacs [Thu, 15 Aug 2013 22:01:28 +0000 (15:01 -0700)]
http: Handle hex/base64 encodings properly

This is a backport of 6d3d60aced39d59eaa5e705b7d822c227d0d3dae for
v0.10.

11 years agodoc: http rawHeaders/rawTrailers
isaacs [Thu, 15 Aug 2013 21:12:12 +0000 (14:12 -0700)]
doc: http rawHeaders/rawTrailers

11 years agohttp: provide access to raw headers/trailers
isaacs [Tue, 6 Aug 2013 01:41:17 +0000 (18:41 -0700)]
http: provide access to raw headers/trailers

The format is [key,value,key,value,...] because that seems to have the
lowest overhead.

Close #4844

11 years agodoc: http keepalive, agent options
isaacs [Mon, 5 Aug 2013 04:30:23 +0000 (21:30 -0700)]
doc: http keepalive, agent options

Close #5839

11 years agohttp: add agent.maxFreeSockets option
isaacs [Mon, 5 Aug 2013 03:54:52 +0000 (20:54 -0700)]
http: add agent.maxFreeSockets option

11 years agotest: update tests after internal api change
Ben Noordhuis [Thu, 15 Aug 2013 20:20:04 +0000 (22:20 +0200)]
test: update tests after internal api change

Commit 0aa1335 changes the way timeout events are dispatched. Update
two tests that still used the old way.

11 years agonode: remove duplicate infoBox checks
Trevor Norris [Thu, 15 Aug 2013 19:31:38 +0000 (12:31 -0700)]
node: remove duplicate infoBox checks

These checks are now done in C++ and don't need to also be checked in
JS. Also remove a couple unused variables.

11 years agotimers: dispatch ontimeout callback by array index
Ben Noordhuis [Thu, 15 Aug 2013 17:23:36 +0000 (19:23 +0200)]
timers: dispatch ontimeout callback by array index

Achieve a minor speed-up by looking up the timeout callback on the timer
object by using an array index rather than a named property.

Gives a performance boost of about 1% on the misc/timers benchmarks.

11 years agosrc: add MakeCallback() that takes an array index
Ben Noordhuis [Thu, 15 Aug 2013 17:22:44 +0000 (19:22 +0200)]
src: add MakeCallback() that takes an array index

Internal helper function for dispatching by array index rather than
named property.

11 years agosmalloc: don't do Has(key), then Get(key)
Ben Noordhuis [Thu, 15 Aug 2013 14:41:19 +0000 (16:41 +0200)]
smalloc: don't do Has(key), then Get(key)

Don't check for the key first before retrieving it. Just fetch it and
check that it has the type we expect.

11 years agotools: cpplint: fix NOLINT(build/include_order)
Ben Noordhuis [Thu, 15 Aug 2013 12:17:41 +0000 (14:17 +0200)]
tools: cpplint: fix NOLINT(build/include_order)

And build/include, build/include_alpha and readability/streams
probably too, though those are currently unused and therefore untested.

11 years agozlib: replace C cast with static_cast
Ben Noordhuis [Wed, 14 Aug 2013 21:49:29 +0000 (23:49 +0200)]
zlib: replace C cast with static_cast

Seems to have escaped the Eye of Sauron^WFedor in commit 8e29ce9.

11 years agotls: handle errors on socket before releasing it
Fedor Indutny [Wed, 7 Aug 2013 12:50:36 +0000 (16:50 +0400)]
tls: handle errors on socket before releasing it

Fix sudden uncatchable ECONNRESETs, when using https server.

11 years agohttp: speed up callbacks, use array indices
Ben Noordhuis [Tue, 13 Aug 2013 21:47:17 +0000 (23:47 +0200)]
http: speed up callbacks, use array indices

Use array indices rather than named properties to store callbacks on
the HTTPParser object.  Speeds up the http benchmarks by a few percent.

11 years agosrc: remove redundant symbol init in node_file.cc
Ben Noordhuis [Wed, 14 Aug 2013 15:45:40 +0000 (17:45 +0200)]
src: remove redundant symbol init in node_file.cc

Don't lazy-init the oncomplete symbol string in the After() function,
it has already been created at module init time.

11 years agosrc: clean up FSReqWrap
Ben Noordhuis [Tue, 13 Aug 2013 10:07:49 +0000 (12:07 +0200)]
src: clean up FSReqWrap

Move the 'free FSReqWrap data?' logic into the class itself.

11 years agosrc: move ReqWrap::data_ to FSReqWrap
Ben Noordhuis [Tue, 13 Aug 2013 09:56:44 +0000 (11:56 +0200)]
src: move ReqWrap::data_ to FSReqWrap

FSReqWrap is the only ReqWrap child class that uses the data_ field so
move it out of ReqWrap and into FSReqWrap.

11 years agocrypto: add TLS 1.1 and 1.2 to secureProtocol list
Matthias Bartelmeß [Mon, 12 Aug 2013 22:21:54 +0000 (00:21 +0200)]
crypto: add TLS 1.1 and 1.2 to secureProtocol list

11 years agocrypto: use consistent conn object unwrapping
Ben Noordhuis [Mon, 12 Aug 2013 21:47:04 +0000 (23:47 +0200)]
crypto: use consistent conn object unwrapping

We use `Foo:Unwrap(args.This())` everywhere else, let's use the same
idiom for Connection::Unwrap().

11 years agocrypto: use consistent variable names
Ben Noordhuis [Mon, 12 Aug 2013 21:39:13 +0000 (23:39 +0200)]
crypto: use consistent variable names

Code cleanup: don't call a Connection object `p` in some places, `c` in
other places and `ss` in yet other places. Let's just call it `conn`.

This also fixes about a million style errors in one fell swoop.

11 years agoutil: fix isPrimitive check
Trevor Norris [Mon, 12 Aug 2013 20:41:51 +0000 (13:41 -0700)]
util: fix isPrimitive check

Previous check failed for the edge case Object.create(null). This uses
the current v8 code for the check.

11 years agocrypto: remove two unused static variables
Ben Noordhuis [Mon, 12 Aug 2013 20:38:39 +0000 (22:38 +0200)]
crypto: remove two unused static variables

11 years agosrc: fix build break from generic macro name
Trevor Norris [Mon, 12 Aug 2013 19:54:49 +0000 (12:54 -0700)]
src: fix build break from generic macro name

WRAP is too generic a macro name and causes the build to fail from
conflicts. They have been prepended with NODE_.

11 years agosrc: don't obj->Set(Integer::New(...), val)
Ben Noordhuis [Mon, 12 Aug 2013 18:34:18 +0000 (20:34 +0200)]
src: don't obj->Set(Integer::New(...), val)

Don't create an Integer when setting a numeric index on an object or an
array, use the version of v8::Object::Set() that takes an uint32_t.

Change the types of the variables from int to uint32_t and clean up
some code consistency issues while we're here.

11 years agosrc: centralize class wrap/unwrap
Trevor Norris [Tue, 6 Aug 2013 00:58:29 +0000 (17:58 -0700)]
src: centralize class wrap/unwrap

While almost all cases were handled by simple WRAP/UNWRAP macros, this
extends those to cover all known occurrences.

11 years agocares_wrap: remove unused function getHostByName()
Ben Noordhuis [Mon, 12 Aug 2013 18:04:38 +0000 (20:04 +0200)]
cares_wrap: remove unused function getHostByName()

Hasn't been used in ages. Also remove its (already disabled) test.

11 years agocares_wrap: don't set oncomplete property from c++
Ben Noordhuis [Mon, 12 Aug 2013 15:54:11 +0000 (17:54 +0200)]
cares_wrap: don't set oncomplete property from c++

Don't set the oncomplete property in src/cares_wrap.cc, we can do it
just as easily in lib/dns.js.

Switch two closures to the 'function with _this_ object' model. Makes
it impossible for an overzealous closure to capture too much context
and accidentally hold on to too much memory.

11 years agotest: fix up internet/test-dns after api change
Ben Noordhuis [Mon, 12 Aug 2013 15:28:38 +0000 (17:28 +0200)]
test: fix up internet/test-dns after api change

* The test calls an internal API that changed in commit ca9eb71.

* Trying to reverse-lookup a bogus hostname now returns EINVAL rather
  than the (bogus!) status code ENOTIMP.

11 years agostream_wrap: use v8::Integer::NewFromUnsigned()
Ben Noordhuis [Sat, 10 Aug 2013 21:25:38 +0000 (23:25 +0200)]
stream_wrap: use v8::Integer::NewFromUnsigned()

Use v8::Integer::NewFromUnsigned() when updating the writeQueueSize
field.

Before this commit, it used v8::Integer::New() but that takes an
int32_t. It's unlikely for a write queue to grow beyond 2**31-1 bytes
but let's use the unsigned integer constructor anyway, just in case.

11 years agov8: fix openbsd build
Ben Noordhuis [Mon, 5 Aug 2013 00:50:45 +0000 (02:50 +0200)]
v8: fix openbsd build

This is [1] applied ahead of time. Summary:

    OpenBSD doesn't have <ucontext.h>. ucontext_t lives in <signal.h>
    and is a typedef for struct sigcontext. There is no uc_mcontext.

[1] https://codereview.chromium.org/21705003/

Note: the patch has been accepted upstream but hasn't made its way into
a stable release yet.

11 years agov8: upgrade v8 to 3.20.14.1
Ben Noordhuis [Sat, 10 Aug 2013 14:27:43 +0000 (16:27 +0200)]
v8: upgrade v8 to 3.20.14.1

11 years agobuild: disable SSLv2 by default
Ben Noordhuis [Sat, 10 Aug 2013 13:40:26 +0000 (15:40 +0200)]
build: disable SSLv2 by default

No one in this day and age should be using SSLv2 so disable it by
default. You can re-enable it with `./configure --with-sslv2` but
there really should be no reason for that.

11 years agobuild: fix up style issues in configure script
Ben Noordhuis [Fri, 2 Aug 2013 09:50:45 +0000 (11:50 +0200)]
build: fix up style issues in configure script

* Use single quotes consistently.
* Remove a few stray semicolons.
* Fix up some overly long lines.
* Line up a few expressions.

11 years agoconfigure: order configure switches alphabetically
Ben Noordhuis [Sat, 10 Aug 2013 11:34:57 +0000 (13:34 +0200)]
configure: order configure switches alphabetically

Alphabetical order should make it easier to find the switches you need
because we've got quite a lot of them now.

Keep --prefix at the top because that's arguably the one people will be
looking for most.

11 years ago build: make ninja build respect V=
Ben Noordhuis [Sat, 10 Aug 2013 11:17:26 +0000 (13:17 +0200)]
 build: make ninja build respect V=

 Compiling with `make V=1` (which is the default) now runs ninja in
 verbose mode. To disable, run `make V=`.

11 years agobuild: don't auto-destroy existing configuration
Ben Noordhuis [Sat, 10 Aug 2013 11:00:51 +0000 (13:00 +0200)]
build: don't auto-destroy existing configuration

Don't run configure when the configure script has been touched. Doing so
would be okay if the Makefile passed the original arguments to configure
but it doesn't - it runs configure without any arguments, effectively
destroying the current configuration.

Remove this misfeature and instead print an error message telling the
user to (re-)run configure.

11 years agodomain: share object and state with native land
Trevor Norris [Wed, 7 Aug 2013 00:01:44 +0000 (17:01 -0700)]
domain: share object and state with native land

Change process.domain to use a getter/setter and access that property
via an array index. These are much faster to get from c++, and it can be
passed to _setupDomainUse and stored as a Persistent<Array>.

InDomain() and GetDomain() as trivial ways to access the domain
information in the native layer. Important because we'll be able to
quickly access if a domain is active. Instead of just whether the domain
module has been loaded.

11 years agonode: remove domain nextTick
Trevor Norris [Tue, 6 Aug 2013 21:22:13 +0000 (14:22 -0700)]
node: remove domain nextTick

It's ridiculously cheap to check if process.domain is set. Don't bother
cluttering the code.

11 years agosrc: don't call v8::Object::SetHiddenValue()
Ben Noordhuis [Fri, 9 Aug 2013 20:35:54 +0000 (22:35 +0200)]
src: don't call v8::Object::SetHiddenValue()

Don't use v8::Object::SetHiddenValue() to keep a reference alive to the
buffer, we can just as easily do that from JS land and it's a lot faster
to boot.

Because the buffer is now a visible property of the write request
object, it's essential that we do *not* log it - we'd be effectively
serializing the whole buffer to a pretty-printed string.

11 years agotest: use common.PORT in simple/test-net-GH-5504
Ben Noordhuis [Fri, 9 Aug 2013 05:33:18 +0000 (07:33 +0200)]
test: use common.PORT in simple/test-net-GH-5504

11 years agosrc: fix windows build breakage from f674b09
Ben Noordhuis [Fri, 9 Aug 2013 15:43:10 +0000 (17:43 +0200)]
src: fix windows build breakage from f674b09

The TWO_BYTE_BUFFER macro never made it into the final version of
the patch that got landed in commit f674b09.

11 years agodgram: don't call into js when send cb is omitted
Ben Noordhuis [Fri, 9 Aug 2013 02:48:10 +0000 (04:48 +0200)]
dgram: don't call into js when send cb is omitted

Speed up dgram.Socket#send()-heavy code a little by omitting the call
into JS land when the user doesn't pass us a completion callback.

11 years agodgram: fix regression in string argument handling
Ben Noordhuis [Fri, 9 Aug 2013 00:33:40 +0000 (02:33 +0200)]
dgram: fix regression in string argument handling

v0.10 allows strings for the offset, length and port arguments to
dgram.send() and dgram.sendto() but master before this commit would
abort with the following assert:

    node: ../../src/udp_wrap.cc:227: static void
    node::UDPWrap::DoSend(const v8::FunctionCallbackInfo<v8::Value>&,
    int): Assertion `args[2]->IsUint32()' failed.

Go beyond what v0.10 does and also add range checks: offset and length
should be >= 0, port should be between 1 and 65535.

That particular change needs to be back-ported to v0.10 because passing
a negative offset or length number aborts with the following assertions:

    node: ../../src/udp_wrap.cc:264: static v8::Handle<v8::Value>
    node::UDPWrap::DoSend(const v8::Arguments&, int): Assertion
    `offset < Buffer::Length(buffer_obj)' failed.

Or:

    node: ../../src/udp_wrap.cc:265: static v8::Handle<v8::Value>
    node::UDPWrap::DoSend(const v8::Arguments&, int): Assertion
    `length <= Buffer::Length(buffer_obj) - offset' failed.

Interestingly enough, a negative port number is accepted in v0.10 but
is silently ignored.

This commit exposed a bug in the simple/test-dgram-close test which
has also been fixed.

11 years agosrc: use v8::String::NewFrom*() functions
Ben Noordhuis [Wed, 7 Aug 2013 19:50:41 +0000 (21:50 +0200)]
src: use v8::String::NewFrom*() functions

* Change calls to String::New() and String::NewSymbol() to their
  respective one-byte, two-byte and UTF-8 counterparts.

* Add a FIXED_ONE_BYTE_STRING macro that takes a string literal and
  turns it into a v8::Local<v8::String>.

* Add helper functions that make v8::String::NewFromOneByte() easier to
  work with. Said function expects a `const uint8_t*` but almost every
  call site deals with `const char*` or `const unsigned char*`. Helps
  us avoid doing reinterpret_casts all over the place.

* Code that handles file system paths keeps using UTF-8 for backwards
  compatibility reasons. At least now the use of UTF-8 is explicit.

* Remove v8::String::NewSymbol() entirely. Almost all call sites were
  effectively minor de-optimizations. If you create a string only once,
  there is no point in making it a symbol. If you are create the same
  string repeatedly, it should probably be cached in a persistent
  handle.