Commit Graph

3046 Commits

Author SHA1 Message Date
Fedor Indutny
ae1e325e8a child_process: accept uid/gid everywhere
Accept uid/gid option in every execute/spawn call (including
cluster.fork). Add documentation where needed.

fix #7881

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-07-02 13:01:07 -07:00
Eli Skeggs
1100f3de7a net: don't emit listening if handle is closed
Fixes #7834

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-07-02 12:35:06 -07:00
Arnout Kazemier
1c0ec71725 events: Output the event that is leaking
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-07-01 15:45:55 +04:00
Fedor Indutny
4128d4d2ba Revert "stream: start old-mode read in a next tick"
This reverts commit 2efe4ab761.
2014-06-30 13:06:35 +04:00
Fedor Indutny
b5175003bc repl: fix multi-line input
The refactor in 3ae0b17c broke the multiline input's visual appearence.
While actually switching to this mode, the `...` prefix is not
displayed.

Additionally, account only SyntaxErrors that are happening at the parse
time, everything else should not be switching repl to the multiline
mode.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-30 13:04:36 +04:00
Jonathan Reem
7fa4a9697d stream: only end reading on null, not undefined
The [Stream documentation for .push](http://nodejs.org/api/stream.html#stream_readable_push_chunk_encoding)
explicitly states multiple times that null is a special cased value
that indicates the end of a stream. It is confusing and undocumented
that undefined *also* ends the stream, even though in object mode
there is a distinct and important difference.

The docs for Object-Mode also explicitly mention null as the *only*
special cased value, making no mention of undefined.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-30 12:45:54 +04:00
Fedor Indutny
a97bdef06d zlib: do not crash on write after close
fix #7767

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-27 17:02:02 +04:00
Fedor Indutny
73343d5cee http: remove unused code block
fix #7769

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-27 17:00:10 +04:00
cjihrig
2cae44f169 buffer: construct new buffer from buffer toJSON() output
Creating a new buffer from the toJSON() output of another
buffer does not currently work. This commit adds that
support. Closes #7849.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-27 13:36:44 +04:00
Saúl Ibarra Corretgé
35b9580cd8
dns: introduce lookupService function
Uses getnameinfo to resolve an address an port into a hostname and
service.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-27 04:02:19 +04:00
Fedor Indutny
c147e81091
crypto: add honorCipherOrder argument
Add `honorCipherOrder` argument to `crypto.createCredentials`.

fix #7249
2014-06-25 14:47:59 +04:00
Chris Dickinson
61baefce1e dns: send lookup c-ares errors to callback
Calling dns.lookup with arguments that generate an error from c-ares
previously sent those errors back to the callback. This commit restores
the ca9eb71 behavior.

Fixes #7731.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-24 17:08:57 -07:00
Fred K. Schott
a55c60c715 module: document important methods
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-24 20:26:02 +04:00
Yazhong Liu
fcbffa71d0 tls: using %StringSplit to split cert.subjectaltname
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-24 09:55:26 +04:00
Charles
be8114e5c5 child_process: don't throw on EAGAIN
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-24 08:45:29 +04:00
Ed Morley
c08da463ad child_process: use full path for cmd.exe on Win32
Currently child_process.exec() assumes that cmd.exe is on the PATH,
and fails with a spawn ENOENT error if it is not.

The Windows 'comspec' environment variable contains the full filepath
to the default command interpreter, eg "C:\Windows\System32\cmd.exe".
Should it not be set, we fall-back to using 'cmd.exe' from PATH, as
before.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-24 08:44:11 +04:00
Nick Apperson
ee95e4f5f7 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>

Conflicts:
	lib/buffer.js
2014-06-23 16:58:55 -07:00
Xavi Magrinyà
1cd48c7ae5 console: console.dir() accepts options object
This features comes from the need of adding extra options when displaying
the object using console.dir().

console.dir() accepts now a second parameter that is passed to util.inspect()
in order to provide extra options to the output. These options are: depth, color
and showHidden. More information about these options in util.inspect() documentation.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-12 10:42:52 -07:00
Xavi Magrinyà
e00cafa311 Added support for options parameter in console.dir()
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-12 10:33:15 -07:00
Brian White
03e9f84933 lib: remove unused variables
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-11 20:41:12 -07:00
Roman Klauke
4d04c7b5ee readline: remove doubled case.
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-11 16:00:47 -07:00
Ryan Graham
4cd522d157 cluster: restore v0.10.x setupMaster() behaviour
In v0.10.x, process.argv and process.execArgv would only be
evaluated and copied into cluster.settings on the first call to
cluster.setupMaster() (either directly or via cluster.fork()),
allowing them to be modified as needed before initializing the
settings.

In 41b75ca the behaviour was changed so that these values are
initialized at the time of the first require('cluster').

Fixes #7670.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-06-11 14:26:16 -07:00
Timothy J Fontaine
1a09da6ec2 Merge remote-tracking branch 'upstream/v0.10'
Conflicts:
	AUTHORS
	ChangeLog
	deps/v8/src/api.cc
	deps/v8/src/unicode-inl.h
	deps/v8/src/unicode.h
	lib/_stream_readable.js
	lib/http.js
	src/cares_wrap.cc
	src/node.cc
	src/node_crypto.cc
	src/node_dtrace.cc
	src/node_file.cc
	src/node_stat_watcher.cc
	src/node_version.h
	src/process_wrap.cc
	src/string_bytes.cc
	src/string_bytes.h
	src/udp_wrap.cc
	src/util.h
	test/simple/test-buffer.js
	test/simple/test-stream2-compatibility.js
2014-06-10 19:36:04 -04:00
Yazhong Liu
ab50fad63b http: add 308 status_code, see RFC7238
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-08 10:02:25 -07:00
Brian White
7fd5a4d096 fs: remove duplicate check
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-08 10:01:23 -07:00
Felix Geisendörfer
80eff96829 string_decoder: Add more comments 2014-06-06 15:07:29 -07:00
Felix Geisendörfer
9fbd0f0f7d string_decoder: Fix failures from new test cases
This patch simplifies the implementation of StringDecoder, fixes the
failures from the new test cases, and also no longer relies on v8's
WriteUtf8 function to encode individual surrogates.
2014-06-06 15:07:29 -07:00
Fedor Indutny
2efe4ab761 stream: start old-mode read in a next tick
Calling `.read()` in the same tick with `.on('data', ...)` may cause
users missing `error` events, because no `error` listeners were set yet.

fix #7618
2014-06-05 21:12:07 -07:00
Nick Muerdter
1df32af74a http: don't default OPTIONS to chunked encoding
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-06-05 14:36:46 -07:00
Fedor Indutny
9920ae67b5 Merge branch 'v0.10'
Conflicts:
	ChangeLog
	lib/events.js
	lib/tls.js
	src/node_constants.cc
	src/node_crypto.cc
	src/node_crypto.h
	src/node_version.h
2014-06-05 07:28:39 -07:00
cjihrig
72cc66e503 fs: close file if fstat() fails in readFile()
Currently, if fstat() fails in readFile(), the callback
is invoked without closing the file. This commit closes
the file before calling back.

Closes #7697
2014-05-28 18:58:32 -07:00
cjihrig
c7b02034ef fs: close file if fstat() fails in readFile()
Currently, if fstat() fails in readFile(), the callback
is invoked without closing the file. This commit closes
the file before calling back.

Closes #7697
2014-05-28 18:57:55 -07:00
Raymond Feng
57c5655885 net: Ensure consistent binding to IPV6 if address is absent
See https://github.com/joyent/node/issues/7675
net.server.listen() behaves inconsistently depending on whether the port
number is provided.

1. port === 0 && host == '' (i.e. false-y), node creates an AF_INET
socket but does not call bind().

2. port > 0 && host == '', node creates an AF_INET6 socket and calls
bind().

The fix makes 1 consistent with 2.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-05-29 02:05:19 +04:00
Alexis Campailla
c862c03485 tls: fix performance issue
See https://github.com/orangemocha/node-connection-drop

I have pinpointed the performance degradation to
ac2263b77f

This change brings performance back to the orginal levels.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-05-23 23:41:30 +04:00
Timothy J Fontaine
1bbb3cc00d lint: lib/_http_client.js 2014-05-22 12:55:41 -07:00
Ben Noordhuis
a367f62adf child_process: don't throw on EMFILE/ENFILE
EMFILE and ENFILE mean 'out of file descriptors'.  It's a run-time error
and as such should emit an error on the child process object, not throw
an exception.

Fixes #7453.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
2014-05-22 12:49:59 -07:00
Kevin Decker
d0c7d93536 http: Optimize queued client aborts
Avoid sending unsent data and destroying otherwise legitimate sockets
for requests that are aborted while still in the agent queue. This
reduces stress on upstream systems who will likely respond to the
request but client app already knows that it will be dropped on the
floor and also helps avoid killing keep-alive connections.
2014-05-22 10:46:44 -07:00
fengmk2
4729202d1e querystring: custom encode and decode
Not all querystring are utf-8 encoding, make querystring can be used
to encode / decode `non-utf8` encoding string if necessary.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
2014-05-22 08:21:55 -07:00
Ryan Cole
f09b02786f child_process: add path to spawn ENOENT Error
Add a file property to the ENOENT Error returned from ChildProcess's
spawn function.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
2014-05-22 07:26:15 -07:00
cjihrig
f1dc55d701 net: don't throw on net.Server.close()
When close() is called on a non-listening server, a synchronous
error is thrown. This commit causes the error to be passed to
the asynchronous callback function instead.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-05-18 17:59:52 +04:00
Dan Kaplun
655ec2113a readline: fixes scoping bug
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-05-17 21:11:53 +04:00
Greg Sabia Tucker
7bd08c5062 child_process: do not set args before throwing
No point in setting args and options if TypeError
is being thrown.

fix #7456

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-05-16 01:31:59 +04:00
Colin Ihrig
8ee9f04de6 fs: add consistent flag fall throughs
stringToFlags() has fall throughs in a case statement.
However, they are not consistently implemented. This commit adds
consistency.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-05-13 11:48:26 -07:00
Dan Kaplun
4a90f51bfe readline: implements keypress buffering
There was an underlying assumption in readline.emitKeypressEvents (and
by extension emitKey) that the given stream (usually process.stdin)
would emit 'data' once per keypress, which is not always the case.

This commit buffers the input stream and ensures a 'keypress' event is
triggered for every keypress (including escape codes).

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-05-13 13:36:53 +04:00
Greg Sabia Tucker
92875501d2 child_process: spawn() does not throw TypeError
Ensure TypeError is thrown, fix a bug where `env` option was
assuming the option was actually an object.

This case is especially bad because it then sets `env == null`
instead of using `process.env`.

Fix #7456

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-05-13 12:25:00 +04:00
Yazhong Liu
e1aa066fe1 readline: fix close event of readline.Interface()
Not removing 'end' listeners for input and output on the 'close' event
resulted in an EventEmitter related memory leak.

This issue also might be reproduced at:
https://github.com/npm/npm/issues/5203

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-05-12 14:13:14 -07:00
Taojie
0f503cf0de src: fix spelling mistake
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-05-12 14:06:14 -07:00
Nicholas Vavilov
5344d0c103 crypto, zlib: replace _binding with _handle
Also include whitespace fixes to appease jslint.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-05-07 16:31:00 -07:00
isaacs
f7ede33f09 url: treat \ the same as /
See https://code.google.com/p/chromium/issues/detail?id=25916

Parse URLs with backslashes the same as web browsers, by replacing all
backslashes with forward slashes, except those that occur after the
first # character.

Manual rebase of 9520ade

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-05-07 14:07:00 -07:00
Feross Aboukhadijeh
522dda2f12 buffer: Fix incorrect Buffer.compare behavior
Fixes #7551

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-05-07 13:44:12 -07:00
Ben Noordhuis
17fbdc18b8 lib: name EventEmitter prototype methods
Before this commit the EventEmitter methods were anonymous functions.
V8 tries to infer names for anonymous functions based on the execution
context but it frequently gets it wrong and when that happens, the
stack trace is usually confusing and unhelpful.  This commit names all
methods so V8 can fall back to the method.name property.

The above gotcha applies to all anonymous functions but is exacerbated
for EventEmitter methods because those are invoked with a plenitude of
different receivers.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-05-07 12:11:57 -07:00
Vladimir Kurchatkin
82fca9136d stream: don't try to finish if buffer is not empty
fixes #5715
2014-05-06 06:50:25 -07:00
Timothy J Fontaine
b19b60a05c Merge remote-tracking branch 'upstream/v0.10'
Reverted 9520adeb37

Conflicts:
	deps/cares/src/ares_parse_txt_reply.c
	deps/uv/.mailmap
	deps/uv/AUTHORS
	deps/uv/ChangeLog
	deps/uv/include/uv.h
	deps/uv/src/unix/error.c
	deps/uv/src/unix/process.c
	deps/uv/src/version.c
	deps/uv/src/win/pipe.c
	deps/uv/src/win/signal.c
	deps/uv/src/win/util.c
	deps/uv/test/test-spawn.c
	deps/uv/vcbuild.bat
	deps/v8/src/platform-posix.cc
	deps/v8/tools/gyp/v8.gyp
	lib/util.js
	src/node.cc
	test/simple/test-util-format.js
	test/simple/test-util.js
2014-05-01 13:54:23 -07:00
Vladimir Kurchatkin
d0fc5538d1 stream: split objectMode for Duplex
This commit introduces `readableObjectMode` and
`writableObjectMode` options for Duplex streams.
This can be used mostly to make parsers and
serializers with Transform streams.

Also the docs section about stream state objects
is removed, because it is not relevant anymore.
The example from the section is remade to show
new options.

fixes #6284

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
2014-04-30 10:44:31 -07:00
Sean McArthur
226f98a356 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>
2014-04-28 22:09:48 -07:00
Rod Vagg
250782d139 util: format as Error if instanceof Error
Conflicts:
	lib/util.js
	test/simple/test-util-format.js

This is a backport to fix #7253

Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-04-26 00:52:49 +04:00
Ben Noordhuis
bd24ab2bd7 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>
2014-04-24 10:43:51 +04:00
Fedor Indutny
afaff70a9b src: lint after OCSP commits 2014-04-18 02:24:48 +04:00
Fedor Indutny
345c40b661 tls: getPeerCertificate(detailed)
Add `raw` property to certificate, add mode to output full certificate
chain.
2014-04-18 02:21:16 +04:00
Fedor Indutny
b3ef289ffb tls: support OCSP on client and server 2014-04-18 02:21:16 +04:00
Fedor Indutny
77d1f4a91f 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>
2014-04-17 14:27:09 +04:00
isaacs
9520adeb37 url: treat \ the same as /
See https://code.google.com/p/chromium/issues/detail?id=25916

Parse URLs with backslashes the same as web browsers, by replacing all
backslashes with forward slashes, except those that occur after the
first # character.
2014-04-15 15:30:43 -07:00
Vladimir Kurchatkin
2c6b424829 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>
2014-04-15 13:00:31 -07:00
Trevor Norris
c7f424e44b 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.
2014-04-14 16:35:33 -07:00
Fedor Indutny
1bd4f3a605 child_process: fix deadlock when sending handles
Fix possible deadlock, when handles are sent in both direction
simultaneously. In such rare cases, both sides may queue their
`NODE_HANDLE_ACK` replies and wait for them.

fix #7465
2014-04-14 20:15:09 +04:00
Yazhong Liu
940974ed03 net: deduplicate Socket.prototype.address
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-04-14 20:12:38 +04:00
Fedor Indutny
2272052461 net: bind to :: TCP address by default
Try binding TCP socket to `::` first before falling back to
`0.0.0.0`.
2014-04-14 20:11:57 +04:00
goussardg
8e823bcbe6 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>
2014-04-10 14:22:05 -07:00
Fedor Indutny
4c36f3e7e6 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>
2014-04-11 01:20:43 +04:00
Fedor Indutny
592be014b6
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>
2014-04-10 19:39:49 +04:00
Fedor Indutny
f2b297cc7c 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
2014-04-08 00:40:22 +04:00
Evan Carroll
95dbb6bf64 util: made util.isArray a direct alias for Array.isArray 2014-04-03 22:39:42 +04:00
Alex Kocharin
42a33c1bb8 domain: don't crash on "throw null"
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-04-02 15:36:30 -07:00
Yuki KAN
006d42786e lib: use triple equals
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-04-02 02:12:18 -07:00
Nick Apperson
d4fcb23e38 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>
2014-04-01 17:31:28 -07:00
James Pickard
e9ce8fc82a 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>
2014-03-31 15:02:17 -07:00
Fedor Indutny
5d2aef17ee
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
2014-03-29 12:01:43 +04:00
Nathan Rajlich
6d15b163b0 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.
2014-03-28 11:05:35 -10:00
Fedor Indutny
d24946b1b4 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
2014-03-27 23:26:52 +04:00
Fedor Indutny
ef096f8d8f 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
2014-03-27 23:25:30 +04:00
Nathan Rajlich
9f23fe1141 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
2014-03-24 12:59:31 -10:00
Yazhong Liu
93c3674ff7 readline: consider newlines for cursor position
Fixes #7266.
Closes #7279.
2014-03-12 14:47:17 -03:00
Timothy J Fontaine
b444392a98 Merge remote-tracking branch 'upstream/v0.10'
Conflicts:
	src/node.cc
	src/node.js
	test/message/max_tick_depth_trace.out
2014-03-10 16:50:00 -07:00
Fedor Indutny
f0d870501e 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
2014-03-11 01:08:43 +04:00
Vladimir Kurchatkin
e108ff4da7 buffer: fix typo in SlowBuffer 2014-03-10 13:23:56 -07:00
Brian White
68bfa91af7 buffer: allow toString to accept Infinity for end 2014-03-10 13:20:28 -07:00
Fedor Indutny
5e06ce4fb9 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
2014-03-05 09:36:35 -08:00
Brian White
31ce34887f crypto: allow setting add'l authenticated data 2014-03-04 12:42:03 +04:00
Greg Brail
6eb4d1d15c 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.
2014-03-03 17:46:49 -08:00
Fedor Indutny
78d245f5b2 Merge remote-tracking branch 'origin/v0.10'
Conflicts:
	configure
	lib/_stream_readable.js
	lib/http.js
	src/node_dtrace.cc
2014-03-02 23:54:19 +04:00
Nathan Rajlich
f3189ace6b http: remove the circular dependency
Between `ClientRequest` and `Agent`. The circular require was doing
weird things at load time, like making the `globalAgent` property
be `undefined` from within the context of the "_http_client"
module.

Removing the circular dependency completely fixes this.

This commit effectively removes the undocumented `Agent#request()`
and `Agent#get()` functions.
2014-02-26 13:19:36 -08:00
Nathan Rajlich
d6bbb19f1d http, https: don't depend on globalAgent
For the `request()` and `get()` functions. I could never
really understand why these two functions go through agent
first... Especially since the user could be passing `agent: false`
or a different Agent instance completely, in which `globalAgent`
will be completely bypassed.

Moved the relevant logic from `Agent#request()` into the
`ClientRequest` constructor.

Incidentally, this commit fixes #7012 (which was the original
intent of this commit).
2014-02-26 13:18:54 -08:00
Nathan Rajlich
0a01a42e87 http: invoke createConnection when no agent
This makes it so that the user may pass in a
`createConnection()` option, and they don't have
to pass `agent: false` at the same time.

Also adding a test for the `createConnection` option,
since none was in place before.

See #7014.
2014-02-26 11:14:32 -08:00
Alexis Campailla
20176a9841 src: make stdout/sterr pipes blocking
Expose `setBlocking` on Pipe's and if a pipe is being created for stdio
on windows then make the pipes blocking.

This fixes test-stream2-stderr-sync.js on Windows.

Fixes #3584
2014-02-26 10:36:58 -08:00
Maxwell Krohn
a22a2d8656 tls: stop NodeBIO::Gets from reading off end of buffer
NodeBIO::Gets was reading off the end of a buffer if it
didn't find a "\n" before the EOF.  This behavior
was causing X509 certificates passed to `https.Agent`
via the "ca" option to be silently discarded. It also
was causing improper parsing of certs and keys
passed to https.Agent, but those problems were worked
around in cdde9a3.

Backed out workaround in `lib/crypto.js` from ccde9a3,
which now isn't needed.  But keep the test introduced
in that commit, which tests properly for this
bug.

This bug was first introduced in a58f93f

Gist containing test code, bisection log, and notes:
   https://gist.github.com/maxtaco/9211605
2014-02-26 17:33:10 +04:00
Alexis Campailla
2ca4d9d662 net: fix listening on FDs on Windows
Fix a bug introduced by 3da36fe of a missed early return of a handle
that needed to be passed to listen.

Fixes test-net-listen-fd0.js on Windows
2014-02-25 13:44:38 -08:00
Mike Pennisi
aae51ecf7d assert: Ensure reflexivity of deepEqual
Ensure that the behavior of `assert.deepEqual` does not depend on
argument ordering  when comparing an `arguments` object with a
non-`arguments` object.
2014-02-25 20:32:49 +04:00
Brian White
70ea5bac43 stream: remove useless check 2014-02-24 15:08:11 +04:00
Nathan Rajlich
e746bbdc2b debugger: don't set the repl.prompt string
It wasn't doing anything, and actually due to
3ae0b17c76, it was causing
the readline `prompt()` function to be overwritten
which throws an error in the REPL shortly after.
2014-02-21 09:43:06 -08:00
David Björklund
b105997193 http: avoid duplicate keys in writeHead
Use setHeader in writeHead to avoid sending duplicate headers

Fixes #5036
2014-02-19 09:24:16 -08:00
Timothy J Fontaine
937e2e351b child_process: execFileSync stderr should inherit
If you don't set your options.stdio for execSync and execFileSync
capture and write to stderr of the parent process by default.

Fixes #7110
2014-02-18 16:03:13 +04:00
Timothy J Fontaine
59baab2776 net: add localPort to connect options
Expose localPort for binding to a specific port for outbound
connections.

If localAddress is not specified '0.0.0.0' is used for ip4 and '::'
for ip6 connections.

Fixes #7092
2014-02-18 15:55:04 +04:00
Brian White
a226be4f76 crypto: allow custom generator for DiffieHellman 2014-02-18 15:49:23 +04:00
Timothy J Fontaine
466a9b5c78 Merge remote-tracking branch 'upstream/v0.10'
Conflicts:
	src/node_zlib.cc
2014-02-17 20:57:53 -08:00
Farid Neshat
562b015170 debugger: Fix breakpoint not showing after restart
The reason this wasn't working was because after restart, when restoring
breakpoints the scripts wasn't loaded, so the breakpoint.script was
undefined. As a fix I added another check to use breakpoint.scriptReq
instead of breakpoint.script, which is the same except when the
breakpoint is a function.

fixes #7027
2014-02-17 20:47:46 -08:00
Timothy J Fontaine
c0d73e6de1 lint: fix missing semi colon in repl 2014-02-17 16:21:38 -08:00
Yazhong Liu
cfe0bab85b readline: fix line event, if input emit 'end'
If an input stream would emit `end` event, like
`fs.createReadStream`, then readline need to get the last line
correctly even though that line isnt ended with `\n`.
2014-02-17 16:21:29 -08:00
Yazhong Liu
c980280159 repl: remove a unnecessary concatenation 2014-02-17 16:04:36 -08:00
Yazhong Liu
3ae0b17c76 repl: REPLServer inherits from readline.Interface
This exposes a setPrompt for and other readline features
2014-02-17 16:04:36 -08:00
Fedor Indutny
75ea11fc08 tls: introduce asynchronous newSession
fix #7105
2014-02-18 01:07:09 +04:00
Timothy J Fontaine
a4436bab7b dgram: pass the bytes sent to the send callback
Fixes #6953
2014-02-15 19:24:42 -08:00
Alexis Campailla
3da36fe00e cluster: handle bind errors on Windows
Before sending a socket from a cluster master to a worker,
we would call listen in UV but not handle the error.

I made createServerHandle call listen on Windows so we get a chance
the handle any bind/listen errors early.

This fix is 100% windows specific.
It fixes test-cluster-bind-twice and
test-cluster-shared-handle-bind-error on Windows.
2014-02-13 16:41:59 -08:00
Timothy J Fontaine
e8df267674 child_process: js bits for spawnSync/execSync
This implements the user-facing APIs that lets one run a child process
and block until it exits.

Logic shared with the async counterpart of each function was refactored
to enable code reuse.

Docs and tests are included.
2014-02-10 13:35:37 -08:00
Timothy J Fontaine
d58c206862 Merge remote-tracking branch 'upstream/v0.10'
Conflicts:
	lib/_stream_writable.js
2014-02-10 11:21:09 -08:00
Fedor Indutny
e2a1d9a9ac stream: use errorEmitted from _writableState 2014-02-10 11:06:03 -08:00
Fedor Indutny
dee5270a6c net: do not re-emit stream errors
fix #7015
2014-02-10 10:59:52 -08:00
Kenan Sulayman
28dbc96a6c dns: validate arguments in resolver
Mitigate C++-land assertion error, add test accordingly.

Fix #7070
2014-02-09 13:38:23 +04:00
Kenan Sulayman
abe4c34c86 dns: verify argument is valid function in resolve
Don't use argument as callback if it's not a valid callback function.
Throw a valid exception instead explaining the issue.

Adds to #7070 ("DNS — Throw meaningful error(s)").
2014-02-09 13:37:50 +04:00
Timothy J Fontaine
eadb4f5606 Merge remote-tracking branch 'upstream/v0.10'
Conflicts:
	deps/v8/src/preparser.cc
	deps/v8/src/win32-math.h
	doc/api/http.markdown
	src/node_buffer.h
	src/node_crypto.cc
	src/node_file.cc
	src/node_http_parser.cc
2014-02-08 16:45:27 -08:00
Fedor Indutny
d10a68736d Revert "dns: validate arguments in resolve"
This reverts commit 56e80a37e0.
2014-02-08 02:15:33 +04:00
Fedor Indutny
96379f83e0 Revert "dns: verify argument is valid function in resolve"
This reverts commit 2ee86c624e.
2014-02-08 02:15:29 +04:00
Kenan Sulayman
2ee86c624e dns: verify argument is valid function in resolve
Don't use argument as callback if it's not a valid callback function.
Throw a valid exception instead explaining the issue. Adds to #7070
("DNS — Throw meaningful error(s)").
2014-02-08 02:10:01 +04:00
Kenan Sulayman
56e80a37e0 dns: validate arguments in resolve
Mitigat  C++-land assertion error, add test accordingly.

fix #7070
2014-02-08 02:08:28 +04:00
Nathan Rajlich
8874a31748 util: show meaningful values for boxed primitives
Before, `new String('foo')` would be inspected as `"{}"` which
is simply not very helpful. Now, a more meaningful
`"[String: 'foo']"` result will be returned from `util.inspect()`.

Boxed String, Boolean, and Number types are all supported.

Closes #7047
2014-02-06 14:19:47 +04:00
iamdoron
1317032c97 fs: make unwatchFile() insensitive to path 2014-02-06 13:04:35 +04:00
Trevor Norris
6cbfcdad46 src: move AsyncListener from process to tracing
The AsyncListener API has been moved into the "tracing" module in order
to keep the process object free from unnecessary clutter.

Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
2014-02-05 17:16:36 -08:00
Ben Noordhuis
d23ac0ea9c src: add v8.getHeapStatistics() function
Add a one-to-one binding to v8::GetHeapStatistics().  Returns info on
the current state of the JS heap, like total size and amount used.
2014-02-05 11:49:01 -08:00
Ben Noordhuis
010222d39f src: add tracing.v8.on('gc') statistics hooks
Add a new 'tracing' module with a v8 property that lets the user
register listeners for gc events.  The listeners are invoked after
every garbage collection cycle with 'before' and 'after' statistics.
Useful for monitoring tools that want to keep track of memory usage.
2014-02-05 11:49:01 -08:00
Fedor Indutny
528a3ce3ed tls: more session configuration options, methods
Introduce `ticketKeys` server option, `session` client option,
`getSession()` and `getTLSTicket()` methods.

fix #7032
2014-02-05 23:28:34 +04:00
Fedor Indutny
2315703035 zlib: separate sync/async methods 2014-02-04 01:41:02 +04:00
Oguz Bastemur
3dcf7253a8 debugger: remove unused definition currentSource
Client's property `currentSource` has no use throughout the project.
2014-02-03 20:35:49 +04:00
Nikolai Vavilov
9b37b83a20 zlib: add sync versions for convenience methods 2014-02-01 03:45:45 +04:00
Fedor Indutny
e796e11087 node: do not ever close stdio
Even if stdio streams are opened as file streams, we should not ever try
to close them. This could be accomplished by passing `autoClose: false`
in options on their creation.
2014-01-30 21:26:19 +04:00
Fedor Indutny
fc26fd6b38 node: do not ever close stdio
Even if stdio streams are opened as file streams, we should not ever try
to close them. This could be accomplished by passing `autoClose: false`
in options on their creation.
2014-01-29 03:27:23 +04:00
Thom Seddon
657cd2c4e5 lib: fix unnecessary coercion in lib/net.js
Original patch by @skypjack in #6627
2014-01-29 03:08:06 +04:00
Thom Seddon
8eaa1ac463 lib: Remove unused var+operations in util.inspect
This was originally introduced in 6034701 to prevent the closing
brace being pushed onto the next line if an object is longer than
the max width, however the functionality was removed in d164989 but
the supplementary variables (and operations) were left behind
2014-01-29 03:08:06 +04:00
Fedor Indutny
9836a4eeda stream_wrap: use uv_try_write where possible
Use `uv_try_write` for string and buffer writes, thus avoiding to do
allocations and copying in some of the cases.
2014-01-29 02:49:03 +04:00
Jacob Hoffman-Andrews
f4c8020d10 crypto: honor default ciphers in client mode
Right now no default ciphers are use in, e.g. https.get, meaning that
weak export ciphers like TLS_RSA_EXPORT_WITH_DES40_CBC_SHA are
accepted.

To reproduce:

node -e "require('https').get({hostname: 'www.howsmyssl.com', \
  path: '/a/check'}, function(res) {res.on('data', \
  function(d) {process.stdout.write(d)})})"
2014-01-28 03:28:09 +04:00
Timothy J Fontaine
c37e1b7c4b Merge remote-tracking branch 'upstream/v0.10'
Conflicts:
	src/node_crypto.cc
	test/simple/test-crypto.js
2014-01-27 11:02:59 -08:00
Jun Ma
d2de8ba34d net: make Socket destroy() re-entrance safe
So that we are free to call socket.destroy() in error event handler.

fix #6769
2014-01-27 22:12:29 +04:00
Fedor Indutny
00efcb4cd7 net: reset endEmitted on reconnect
fix #6908
2014-01-25 12:20:45 -08:00
Fedor Indutny
a454063ea1 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
2014-01-25 12:03:20 -08:00
Timothy J Fontaine
c1b1f31203 Merge remote-tracking branch 'upstream/v0.10'
Conflicts:
	AUTHORS
	ChangeLog
	deps/uv/AUTHORS
	deps/uv/ChangeLog
	deps/uv/src/unix/process.c
	deps/uv/src/version.c
	lib/net.js
	node.gyp
	src/node_version.h
2014-01-24 19:13:50 -08:00
Fedor Indutny
640912d18a tls_wrap: propagate errors to write callbacks
fix #6903
2014-01-24 22:09:42 +04:00
Fedor Indutny
d019eac5b5 tls: emit clientError on early socket close
fix #6903
2014-01-24 22:09:17 +04:00
Fedor Indutny
c79c304ead tls: process accumulated input
When creating TLSSocket on top of the regular socket that already
contains some received data, `_tls_wrap.js` should try to write all that
data to the internal `SSL*` instance.

fix #6940
2014-01-23 20:39:32 +04:00
Timothy J Fontaine
b0e5f195df src: lint lib/net.js 2014-01-22 21:05:51 -08:00
Ben Noordhuis
74d9aa49d5 crypto: support custom pbkdf2 digest methods
Make the HMAC digest method configurable.  Update crypto.pbkdf2() and
crypto.pbkdf2Sync() to take an extra, optional digest argument.

Before this commit, SHA-1 (admittedly the most common method) was used
exclusively.

Fixes #6553.
2014-01-22 15:58:07 +04:00
Jo Liss
b9bec2031e path: improve POSIX path.join() performance
Performance gains are ~4x (~1.5us), but still much slower than a naive
approach. There is some duplicate work done between join(), normalize()
and normalizeArray() so additional optimizations are possible.

Note that this only improves the POSIX implementation.

Thanks to @isaacs and @othiym23 for helping with this optimization.

Signed-off-by: Trevor Norris <trev.norris@gmail.com>
2014-01-21 17:00:56 -08:00
Fedor Indutny
cdde9a386a crypto: add newline to cert and key if not present
After one of OpenSSL updates we have stopped accepting PEM private keys
and certificates that doesn't end with a newline (`\n`) character.
Handle this regression in `crypto.js` to make less trouble to our users.

fix #6892
2014-01-22 02:42:04 +04:00