Matthias Bartelmeß [Mon, 12 Aug 2013 22:21:54 +0000 (00:21 +0200)]
crypto: add TLS 1.1 and 1.2 to secureProtocol list
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().
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.
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.
Ben Noordhuis [Mon, 12 Aug 2013 20:38:39 +0000 (22:38 +0200)]
crypto: remove two unused static variables
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_.
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.
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.
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.
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.
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.
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.
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.
Ben Noordhuis [Sat, 10 Aug 2013 14:27:43 +0000 (16:27 +0200)]
v8: upgrade v8 to 3.20.14.1
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.
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.
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.
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=`.
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.
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.
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.
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.
Ben Noordhuis [Fri, 9 Aug 2013 05:33:18 +0000 (07:33 +0200)]
test: use common.PORT in simple/test-net-GH-5504
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.
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.
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.
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.
isaacs [Sat, 27 Jul 2013 00:05:36 +0000 (17:05 -0700)]
stream: Short-circuit buffer pushes when flowing
When a stream is flowing, and not in the middle of a sync read, and
the read buffer currently has a length of 0, we can just emit a 'data'
event rather than push it onto the array, emit 'readable', and then
automatically call read().
As it happens, this is quite a frequent occurrence! Making this change
brings the HTTP benchmarks back into a good place after the removal of
the .ondata/.onend socket kludge methods.
isaacs [Fri, 26 Jul 2013 02:33:15 +0000 (19:33 -0700)]
http: Use streams3 directly, not .ondata/end
Trevor Norris [Fri, 19 Jul 2013 23:15:25 +0000 (16:15 -0700)]
smalloc: allow different external array types
smalloc.alloc now accepts an optional third argument which allows
specifying the type of array that should be allocated. All available
types are now located on smalloc.Types.
Trevor Norris [Fri, 2 Aug 2013 17:11:35 +0000 (10:11 -0700)]
smalloc: cleanup checks/conversions
* Moved the ToObject check out of smalloc::Alloc and into JS. Direct
usage of that method is for internal use only and so can bypass the
possible coercion.
* Same has been done with smalloc::SliceOnto.
* smalloc::CopyOnto will now throw if passed argument is not an object.
* Remove extra TargetFreeCallback function. There was a use for it when
it was working with a Local<T>, but that code has been removed making
the function superfluous.
Ben Noordhuis [Wed, 7 Aug 2013 19:30:46 +0000 (21:30 +0200)]
stream_wrap: fix long line introduced in da5ad92
Said commit was a back-port from a feature branch where it did lint.
Mea culpa.
isaacs [Wed, 7 Aug 2013 17:23:45 +0000 (10:23 -0700)]
http: Support legacy agent.addRequest API
There are some agent subclasses using this today.
Despite the addRequest function being undocumented internal API, it's
easy enough to just support the old signature for backwards
compatibility.
Ben Noordhuis [Wed, 7 Aug 2013 16:03:13 +0000 (18:03 +0200)]
src: remove no-op HandleWrap::Initialize()
It's never been used and we probably never will. Remove it.
Ben Noordhuis [Wed, 7 Aug 2013 15:21:25 +0000 (17:21 +0200)]
stream_wrap: add handle type checkers
Add is_named_pipe(), is_named_pipe_ipc() and is_tcp() and update the
code base to use those rather than `stream->type == UV_FOO` and
`reinterpret_cast<uv_pipe_t*>(handle)->ipc` style checks.
Ben Noordhuis [Wed, 7 Aug 2013 15:14:16 +0000 (17:14 +0200)]
stream_wrap: use getters, not direct field access
Hide member fields behind getters. Make the fields themselves const
in the sense that the pointer is non-assignable - the pointed to object
remains mutable.
Makes reasoning about lifecycle and mutability a little easier.
Ben Noordhuis [Wed, 7 Aug 2013 12:53:49 +0000 (14:53 +0200)]
src: constify WITH_GENERIC_STREAM macro
Make the pointer-to-wrap const (i.e. mutable but not assignable) to
prevent accidental reassignment in the macro body.
Ben Noordhuis [Wed, 7 Aug 2013 12:45:37 +0000 (14:45 +0200)]
src: add IsEmpty() check to HasInstance()
The check has virtually zero overhead and it simplifies the call sites
because they were calling IsEmpty() anwyay.
Timothy J Fontaine [Wed, 7 Aug 2013 00:13:47 +0000 (17:13 -0700)]
Now working on 0.11.6
Timothy J Fontaine [Wed, 7 Aug 2013 00:13:17 +0000 (17:13 -0700)]
Merge branch 'v0.11.5-release'
Trevor Norris [Tue, 6 Aug 2013 22:42:47 +0000 (15:42 -0700)]
domains: properly check if domains are being used
process.domain is almost never just undefined, so it was setting the
object property unnecessarily.
Timothy J Fontaine [Tue, 6 Aug 2013 21:41:21 +0000 (14:41 -0700)]
2013.08.06, Version 0.11.5 (Unstable)
* v8: upgrade to 3.20.11
* uv: upgrade to v0.11.7
* buffer: return offset for end of last write (Trevor Norris)
* build: embed the mdb_v8.so into the binary (Timothy J Fontaine)
* build: fix --without-ssl build (Ben Noordhuis)
* child_process: add 'shell' option to .exec() (Ben Noordhuis)
* dgram: report send errors to cb, don't pass bytes (Ben Noordhuis)
* fs: write strings directly to disk (Trevor Norris)
* https: fix default port (Koichi Kobayashi)
* openssl: use asm for sha, md5, rmd (Fedor Indutny)
* os: add mac address to networkInterfaces() output (Brian White)
* smalloc: introduce smalloc module (Trevor Norris)
* stream: Simplify flowing, passive data listening (streams3) (isaacs)
* tls: asynchronous SNICallback (Fedor Indutny)
* tls: share tls tickets key between cluster workers (Fedor Indutny)
* util: don't throw on circular %j input to format() (Ben Noordhuis)
Timothy J Fontaine [Tue, 6 Aug 2013 21:35:33 +0000 (14:35 -0700)]
uv: Upgrade to v0.11.7
Fedor Indutny [Tue, 6 Aug 2013 16:30:21 +0000 (20:30 +0400)]
tls: fix lazy initialization of clienthello parser
`server.SNICallback` was initialized with `SNICallback.bind(this)`, and
therefore check `this.SNICallback === SNICallback` was always false, and
`_tls_wrap.js` always thought that it was a custom callback instead of
default one. Which in turn was causing clienthello parser to be enabled
regardless of presence of SNI contexts.
Timothy J Fontaine [Tue, 6 Aug 2013 18:54:28 +0000 (11:54 -0700)]
Merge remote-tracking branch 'upstream/v0.10'
Conflicts:
deps/v8/test/cctest/test-api.cc
lib/events.js
lib/http.js
Ben Noordhuis [Tue, 6 Aug 2013 15:42:28 +0000 (17:42 +0200)]
process_wrap: omit superfluous Number creation
Don't create a superfluous Number object, just use the version of
v8::Object::Get() that takes an unsigned int. Convert the index to
unsigned int while we're here.
Eran Hammer [Mon, 5 Aug 2013 09:56:40 +0000 (02:56 -0700)]
stream: Fix double pipe error emit
If an error listener is added to a stream using once() before it is
piped, it is invoked and removed during pipe() but before pipe() sees it
which causes it to be emitted again.
Fixes #4155 #4978
Ben Noordhuis [Tue, 6 Aug 2013 13:47:42 +0000 (15:47 +0200)]
src: fix WITH_GENERIC_STREAM() type check bug
The handle object was checked against the wrong constructor template.
Put another way, it was unwrapped as the wrong StreamWrap type.
Ben Noordhuis [Tue, 6 Aug 2013 13:36:12 +0000 (15:36 +0200)]
crypto: fix signed/unsigned comparison warning
The type of the expression `(uint16_t) server_names_len + 2` gets
implicitly widened to int. Change the type of server_names_len to
uint32_t to avoid the following warnings:
../../src/node_crypto_clienthello.cc:144: warning: comparison
between signed and unsigned integer expressions
../../src/node_crypto_clienthello.cc:146: warning: comparison
between signed and unsigned integer expressions
Fedor Indutny [Sat, 3 Aug 2013 17:29:54 +0000 (21:29 +0400)]
tls: asynchronous SNICallback
Make ClientHelloParser handle SNI extension, and extend `_tls_wrap.js`
to support loading SNI Context from both hello, and resumed session.
fix #5967
Fedor Indutny [Fri, 2 Aug 2013 12:16:13 +0000 (16:16 +0400)]
tls_wrap: DRY ClientHelloParser
Share ClientHelloParser code between `tls_wrap.cc` and `node_crypto.cc`.
fix #5959
isaacs [Mon, 5 Aug 2013 21:09:32 +0000 (14:09 -0700)]
repl: Add 'smalloc' to list of known modules
Evan Solomon [Fri, 2 Aug 2013 16:57:46 +0000 (09:57 -0700)]
doc: add a missing word in streams doc
Ignore encoding *if* chunk is a buffer
Timothy J Fontaine [Mon, 5 Aug 2013 21:33:55 +0000 (14:33 -0700)]
build: fix ia32 sunos, elfwrap only needs -64
Timothy J Fontaine [Wed, 17 Jul 2013 20:46:25 +0000 (20:46 +0000)]
build: embed the mdb_v8.so into the binary
This builds and includes the mdb_v8.so in the binary of node so mdb
can be sure to always use the latest version
isaacs [Mon, 5 Aug 2013 20:56:05 +0000 (13:56 -0700)]
doc: Update LICENSE for npm's Artistic 2.0
isaacs [Mon, 5 Aug 2013 19:55:31 +0000 (12:55 -0700)]
test: Move test-http-default-port from disabled to simple
Koichi Kobayashi [Sun, 4 Aug 2013 06:39:50 +0000 (15:39 +0900)]
https: fix default port
https.get('https://github.com/') should use port 443, not 80.
isaacs [Mon, 5 Aug 2013 19:33:19 +0000 (12:33 -0700)]
http: Fix overlooked agent.globalAgent export
Noticed by @bnoordhuis in https://github.com/joyent/node/pull/5991#discussion_r5575946
mstarzinger@chromium.org [Mon, 15 Jul 2013 11:41:41 +0000 (11:41 +0000)]
v8: back-port fix for CVE-2013-2882
Quoting the CVE:
Google V8, as used in Google Chrome before 28.0.1500.95, allows
remote attackers to cause a denial of service or possibly have
unspecified other impact via vectors that leverage "type confusion."
Likely has zero impact on node.js because it only runs local, trusted
code but let's apply it anyway.
This is a back-port of upstream commit r15665. Original commit log:
Use internal array as API function cache.
R=yangguo@chromium.org
BUG=chromium:260106
TEST=cctest/test-api/Regress260106
Review URL: https://codereview.chromium.org/
19159003
Fixes #5973.
Forrest L Norvell [Thu, 14 Mar 2013 20:31:18 +0000 (13:31 -0700)]
doc: document domain.enter() and domain.exit()
Adds the documentation requested in #5017.
Sam Roberts [Fri, 2 Aug 2013 19:41:24 +0000 (12:41 -0700)]
doc: fs.open, fix flag/mode confusion, etc.
Flags and modes aren't the same, symlinks are followed in all of the
path but the last component, docs should say something about what the
mode argument is for and when its used, fs.openSync should point to the
function that contains the docs for its args, as fs.writeSync does.
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/
Fedor Indutny [Fri, 2 Aug 2013 16:11:17 +0000 (20:11 +0400)]
tls: fix handling of `SNICallback` server option
It shouldn't ignore it!
There're two possibile cases, which should be handled properly:
1. Having a default `SNICallback` which is using contexts, added with
`server.addContext(...)` routine
2. Having a custom `SNICallback`.
In first case we may want to opt-out setting `.onsniselect` method (and
thus save some CPU time), if there're no contexts added. But, if custom
`SNICallback` is used, `.onsniselect` should always be set, because
server contexts don't affect it.
Ben Noordhuis [Sat, 3 Aug 2013 20:50:15 +0000 (22:50 +0200)]
src: use static_cast for void-to-T casts
Code cleanup, replace a few uses of reinterpret_cast<T*>(void_ptr) with
static_cast<T*>(void_ptr).
Ben Noordhuis [Sat, 3 Aug 2013 20:18:35 +0000 (22:18 +0200)]
src: use PersistentToLocal() in a few more places
Update a few more `Local<T>::New(isolate, persistent)` call sites to
`PersistentToLocal(isolate, persistent)` - the latter has a fast path
for non-weak persistent references.
Fedor Indutny [Sat, 3 Aug 2013 09:09:02 +0000 (13:09 +0400)]
crypto: fix another over-run in bio
When doing `FreeEmpty`, `NodeBIO` skips pre-allocated `head_` buffer.
However this might lead to double-freeing buffers since in `~NodeBIO()`
we're starting deallocation from `head_` buffer.
Ben Noordhuis [Fri, 2 Aug 2013 23:28:51 +0000 (01:28 +0200)]
src: remove non-isolate PersistentToLocal(), v2
Commit 78d9094 updated src/*.cc to use the version of PersistentToLocal
that takes a v8::Isolate* as its first argument. This commit removes
the non-isolate version.
isaacs [Fri, 2 Aug 2013 21:55:01 +0000 (14:55 -0700)]
npm: Upgrade to 1.3.7
Trevor Norris [Thu, 1 Aug 2013 21:53:52 +0000 (14:53 -0700)]
process: set key properties as ReadOnly
Ben Noordhuis [Fri, 2 Aug 2013 21:12:56 +0000 (23:12 +0200)]
src: remove non-isolate PersistentToLocal()
There is no need for it and it's a tiny bit slower than the version of
PersistentToLocal() that takes a v8::Isolate* as its first argument.
Trevor Norris [Fri, 2 Aug 2013 20:00:54 +0000 (13:00 -0700)]
smalloc: remove double checks
Now that values are checks in JS, no need for them to be checked in C++.
Trevor Norris [Fri, 2 Aug 2013 19:52:43 +0000 (12:52 -0700)]
smalloc: fix assertion fails/segfault
* Numeric values passed to alloc were converted to int32, not uint32
before the range check, which allows wrap around on ToUint32. This
would cause massive malloc calls and v8 fatal errors.
* dispose would not check if value was an Object, causing segfault if a
Primitive was passed.
* kMaxLength was not enumerable.
Trevor Norris [Fri, 2 Aug 2013 19:52:34 +0000 (12:52 -0700)]
util: add isPrimitive check
Ben Noordhuis [Fri, 2 Aug 2013 11:52:20 +0000 (13:52 +0200)]
build: fix --without-ssl build
Build breakage accidentally introduced in 8e29ce9 during code cleanup.
HAVE_OPENSSL is always defined (as either 0 or 1) so use #if rather
than #ifdef.
Fixes #5979.
isaacs [Fri, 26 Jul 2013 21:38:08 +0000 (14:38 -0700)]
src: Replace macros with util functions
Trevor Norris [Thu, 1 Aug 2013 22:02:38 +0000 (15:02 -0700)]
benchmark: update misc to new v8 API
Trevor Norris [Thu, 1 Aug 2013 20:53:19 +0000 (13:53 -0700)]
test: add mac to test-os
Fix test from 30701d6.
Ben Noordhuis [Thu, 1 Aug 2013 14:09:42 +0000 (16:09 +0200)]
test: future-proof simple/test-event-emitter-memory-leak
Run the garbage collector before running the actual test. It doesn't
matter now but if in the future something in node.js core creates a lot
of reclaimable garbage, that will break the test's expectation.
Ben Noordhuis [Thu, 1 Aug 2013 14:00:40 +0000 (16:00 +0200)]
test: fix pummel/test-net-connect-memleak
* Run the garbage collector before creating the big array. It doesn't
matter now but if in the future something in node.js core creates
a lot of reclaimable garbage, that will break the test's expectation.
* The first RSS check was being done too late. The garbage collector
might have run before the check, throwing off the 'reclaimed memory'
calculation.
* Due to changes in how V8 represents the big array internally, the
actual memory usage is just below 256 MB on x64. Update the test's
expectation.
Ben Noordhuis [Thu, 1 Aug 2013 12:35:13 +0000 (14:35 +0200)]
events: fix memory leak, don't leak event names
Before this commit, events were set to undefined rather than deleted
from the EventEmitter's backing dictionary for performance reasons:
`delete obj.key` causes a transition of the dictionary's hidden class
and that can be costly.
Unfortunately, that introduces a memory leak when many events are added
and then removed again. The strings containing the event names are never
reclaimed by the garbage collector because they remain part of the
dictionary.
That's why this commit makes EventEmitter delete events again. This
effectively reverts commit 0397223.
Fixes #5970.
Fedor Indutny [Sun, 21 Jul 2013 16:16:26 +0000 (23:16 +0700)]
tls_wrap: parse tls session ticket extension
And, if present and non-empty, don't invoke `resumeSession` callback.
fix #5872
Brian White [Wed, 31 Jul 2013 23:13:36 +0000 (19:13 -0400)]
os: add mac address to networkInterfaces() output
Ben Noordhuis [Thu, 1 Aug 2013 10:33:33 +0000 (12:33 +0200)]
cpplint: exclude src/node_win32_perfctr_provider.cc
It's forced to violate the build/include_order rule because it includes
a header file generated with ctrpp.exe that doesn't include perflib.h
itself.
Ben Noordhuis [Thu, 1 Aug 2013 10:26:23 +0000 (12:26 +0200)]
src: don't include <string.h> twice in src/node.cc
Bert Belder [Thu, 1 Aug 2013 09:53:41 +0000 (11:53 +0200)]
build: disable some msvc compiler warnings
These are not real problems, and they are so plenty that actual problems
are hidden from view.
Bert Belder [Thu, 1 Aug 2013 09:39:25 +0000 (11:39 +0200)]
build: un-break the windows build
Ben Noordhuis [Wed, 31 Jul 2013 21:16:08 +0000 (23:16 +0200)]
src: more lint after cpplint tightening
Commit 847c6d9 adds a 'project headers before system headers' check
to cpplint. Update the files in src/ to make the linter pass again.
Ben Noordhuis [Wed, 31 Jul 2013 20:34:34 +0000 (22:34 +0200)]
tools: cpplint: fix up build/include_order rule
Change the build/include_order rule to match our preference:
project headers before system headers.
The rationale is that system headers before project headers makes it
easy to slip in bugs where a project header that requires a definition
from a system header, forgets to include the system header but still
compiles because the source files that include the project header
coincidentally include the system header too.
A good example is the size_t type. A project header file that needs the
definition of size_t should include stddef.h but forgetting to do so
will probably go unnoticed for a long time because almost every other
system header includes stddef.h (either directly or indirectly) and
almost every source file includes one or more system headers.
Ergo, project headers before system headers. It's a good thing.
Antony Bailey [Wed, 31 Jul 2013 18:28:29 +0000 (19:28 +0100)]
doc: remove travis status image
The project has moved to Jenkins. The status image is no longer
needed and perpetually shows a failed build. Remove it.
Fedor Indutny [Wed, 31 Jul 2013 18:35:46 +0000 (22:35 +0400)]
etw_provider: unbreak windows build
Fedor Indutny [Wed, 31 Jul 2013 10:54:06 +0000 (14:54 +0400)]
make: add `cpplint` to `test` target
Also, exclude some C-headers, machine generated headers and tweaked
sources from cpplint file list.
Fedor Indutny [Wed, 31 Jul 2013 18:07:29 +0000 (22:07 +0400)]
src: lint c++ code
Fedor Indutny [Wed, 31 Jul 2013 18:05:31 +0000 (22:05 +0400)]
cpplint: make lint rules closer to node's source
* Support C-style header guards (/* comments */)
* Support `class NODE_EXTERN something`
* Support `} // extern "C"` closures
* Ignore header order
* Ignore `long/short` usage (because of OpenSSL's API)
Trevor Norris [Tue, 30 Jul 2013 22:06:45 +0000 (15:06 -0700)]
node: add inTick and lastThrew to infoBox
To prevent all unnecessary calls to JS from MakeCallback, the remaining
two immediate return variables inTick and lastThrew have been added to
infoBox. Now MakeCallback should never need to call into JS unless it
absolutely has to.
Also removed Tock. Performance tests showed it was at least as fast or
faster than using a normal object, and this is more readable.
Ben Noordhuis [Wed, 31 Jul 2013 03:50:26 +0000 (05:50 +0200)]
http: improve chunked res.write(buf) performance
Avoid a costly buffer-to-string operation. Instead, allocate a new
buffer, copy the chunk header and data into it and send that.
The speed difference is negligible on small payloads but it really
shines with larger (10+ kB) chunks. benchmark/http/end-vs-write-end
with 64 kB chunks gives 45-50% higher throughput. With 1 MB chunks,
the difference is a staggering 590%.
Of course, YMMV will vary with real workloads and networks but this
commit should have a positive impact on CPU and memory consumption.
Big kudos to Wyatt Preul (@wpreul) for reporting the issue and providing
the initial patch.
Fixes #5941 and #5944.
Wyatt Preul [Tue, 11 Jun 2013 20:56:03 +0000 (15:56 -0500)]
docs: Warning about consuming response
Ben Noordhuis [Tue, 30 Jul 2013 12:27:13 +0000 (14:27 +0200)]
crypto: fix assert() on malformed hex input
Use the StringBytes::IsValidString() function introduced in commit
dce26cc to ensure that the input string meets the expectations of the
other StringBytes functions before processing it further.
Fixes the following assertion:
Assertion failed: (str->Length() % 2 == 0 && "invalid hex string
length"), function StorageSize, file ../../src/string_bytes.cc,
line 301.
Fixes #5725.
Ben Noordhuis [Tue, 30 Jul 2013 12:26:11 +0000 (14:26 +0200)]
string_bytes: add StringBytes::IsValidString()
Performs a quick, non-exhaustive check on the input string to see if
it's compatible with the specified string encoding.
Curently it only checks that hex strings have a length that is a
multiple of two.
Ben Noordhuis [Mon, 29 Jul 2013 19:00:33 +0000 (21:00 +0200)]
util: don't throw on circular %j input to format()
Don't throw an exception when the argument to %j is an object that
contains circular references, it's not helpful. Catch the exception
and return the string '[Circular]'.