Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2013-05-15crypto: Pass encodings for Hmac digestisaacs
2013-05-15crypto: use StringBytes::Encodeisaacs
2013-05-15crypto: Pass strings to binding layer directlyisaacs
2013-05-14stream: Make default encoding configurableisaacs
Pretty much everything assumes strings to be utf-8, but crypto traditionally used binary strings, so we need to keep the default that way until most users get off of that pattern.
2013-05-14stream: don't create unnecessary buffers in Readableisaacs
If there is an encoding, and we do 'stream.push(chunk, enc)', and the encoding argument matches the stated encoding, then we're converting from a string, to a buffer, and then back to a string. Of course, this is a completely pointless bit of work, so it's best to avoid it when we know that we can do so safely.
2013-05-14lintisaacs
2013-05-13child_process: fix handle deliveryBen Noordhuis
Commit 9352c19 ("child_process: don't emit same handle twice") trades one bug for another. Before said commit, a handle was sometimes delivered with messages it didn't belong to. The bug fix introduced another bug that needs some explaining. On UNIX systems, handles are basically file descriptors that are passed around with the sendmsg() and recvmsg() system calls, using auxiliary data (SCM_RIGHTS) as the transport. node.js and libuv depend on the fact that none of the supported systems ever emit more than one SCM_RIGHTS message from a recvmsg() syscall. That assumption is something we should probably address someday for the sake of portability but that's a separate discussion. So, SCM_RIGHTS messages are never coalesced. SCM_RIGHTS and normal messages however _are_ coalesced. That is, recvmsg() might return this: recvmsg(); // { "message-with-fd", "message", "message" } The operating system implicitly breaks pending messages along SCM_RIGHTS boundaries. Most Unices break before such messages but Linux also breaks _after_ them. When the sender looks like this: sendmsg("message"); sendmsg("message-with-fd"); sendmsg("message"); Then on most Unices the receiver sees messages arriving like this: recvmsg(); // { "message" } recvmsg(); // { "message-with-fd", "message" } The bug fix in commit 9352c19 assumes this behavior. On Linux however, those messages can also come in like this: recvmsg(); // { "message", "message-with-fd" } recvmsg(); // { "message" } In other words, it's incorrect to assume that the file descriptor is always attached to the first message. This commit makes node wise up. Fixes #5330.
2013-05-08stream: make Readable.wrap support empty streamsDaniel Moore
This makes Readable.wrap behave properly when the wrapped stream ends before emitting any data events.
2013-05-08stream: make Readable.wrap support objectModeDaniel Moore
Added a check to see if the stream is in objectMode before deciding whether to include or exclude data from an old-style wrapped stream.
2013-05-02debugger: breakpoints in scripts not loaded yetMiroslav Bajtoš
When developer calls setBreakpoint with an unknown script name, we convert the script name into regular expression matching all paths ending with given name (name can be a relative path too). To create such breakpoint in V8, we use type `scriptRegEx` instead of `scriptId` for `setbreakpoint` request. To restore such breakpoint, we save the original script name send by the user. We use this original name to set (restore) breakpoint in the new child process. This is a back-port of commit 5db936d from the master branch.
2013-04-26debugger: `restart` with custom debug portMiroslav Bajtoš
Fixed a bug in debugger repl where `restart` command did not work when a custom debug port was specified via command-line option --port={number}. File test/simple/helper-debugger-repl.js was extracted from test/simple/test-debugger-repl.js
2013-04-22http: Don't try to destroy nonexistent socketsisaacs
Fixes #3740 In the case of pipelined requests, you can have a situation where the socket gets destroyed via one req/res object, but then trying to destroy *another* req/res on the same socket will cause it to call undefined.destroy(), since it was already removed from that message. Add a guard to OutgoingMessage.destroy and IncomingMessage.destroy to prevent this error.
2013-04-21crypto: LazyTransform on properties, not methodsisaacs
It needs to apply the Transform class when the _readableState, _writableState, or _transformState properties are accessed, otherwise things like setEncoding and on('data') don't work properly. Also, the methods wrappers are no longer needed, since they're only problematic because they access the undefined properties.
2013-04-19assert: put info in err.message, not err.nameRyan Doenges
4716dc6 made assert.equal() and related functions work better by generating a better toString() from the expected, actual, and operator values passed to fail(). Unfortunately, this was accomplished by putting the generated message into the error's `name` property. When you passed in a custom error message, the error would put the custom error into `name` *and* `message`, resulting in helpful string representations like "AssertionError: Oh no: Oh no". This commit resolves that issue by storing the generated message in the `message` property while leaving the error's name alone and adding a regression test so that this doesn't pop back up later. Closes #5292.
2013-04-18dgram: fix no address bind()Ben Noordhuis
I broke dgram.Socket#bind(port, cb) almost a year ago in 332fea5a but it wasn't until today that someone complained and none of the tests caught it because they all either specify the address or omit the callback. Anyway, now it works again and does what you expect: it binds the socket to the "any" address ("0.0.0.0" for IPv4 and "::" for IPv6.)
2013-04-12stream: Fix unshift() race conditionsisaacs
Fix #5272 The consumption of a readable stream is a dance with 3 partners. 1. The specific stream Author (A) 2. The Stream Base class (B), and 3. The Consumer of the stream (C) When B calls the _read() method that A implements, it sets a 'reading' flag, so that parallel calls to _read() can be avoided. When A calls stream.push(), B knows that it's safe to start calling _read() again. If the consumer C is some kind of parser that wants in some cases to pass the source stream off to some other party, but not before "putting back" some bit of previously consumed data (as in the case of Node's websocket http upgrade implementation). So, stream.unshift() will generally *never* be called by A, but *only* called by C. Prior to this patch, stream.unshift() *also* unset the state.reading flag, meaning that C could indicate the end of a read, and B would dutifully fire off another _read() call to A. This is inappropriate. In the case of fs streams, and other variably-laggy streams that don't tolerate overlapped _read() calls, this causes big problems. Also, calling stream.shift() after the 'end' event did not raise any kind of error, but would cause very strange behavior indeed. Calling it after the EOF chunk was seen, but before the 'end' event was fired would also cause weird behavior, and could lead to data being lost, since it would not emit another 'readable' event. This change makes it so that: 1. stream.unshift() does *not* set state.reading = false 2. stream.unshift() is allowed up until the 'end' event. 3. unshifting onto a EOF-encountered and zero-length (but not yet end-emitted) stream will defer the 'end' event until the new data is consumed. 4. pushing onto a EOF-encountered stream is now an error. So, if you read(), you have that single tick to safely unshift() data back into the stream, even if the null chunk was pushed, and the length was 0.
2013-04-11lintisaacs
2013-04-11child_process: fix O(n*m) scan of cmd stringBen Noordhuis
Don't scan the whole string for a "NODE_" substring, just check that the string starts with the expected prefix. This is a reprise of dbbfbe7 but this time for the child_process module.
2013-04-11cluster: fix O(n*m) scan of cmd stringBen Noordhuis
Don't scan the whole string for a "NODE_CLUSTER_" substring, just check that the string starts with the expected prefix. The linear scan was causing a noticeable (but unsurprising) slowdown on messages with a large .cmd string property.
2013-04-10net: fix socket.bytesWritten Buffers supportFedor Indutny
Buffer.byteLength() works only for string inputs. Thus, when connection has pending Buffer to write, it should just use it's length instead of throwing exception.
2013-04-09buffer: fix offset checksŁukasz Walukiewicz
Fixed offset checks in Buffer.readInt32LE() and Buffer.readInt32BE() functions.
2013-04-09stream: call write cb before finish eventisaacs
Since 049903e, an end callback could be called before a write callback if end() is called before the write is done. This patch resolves the issue. In collaboration with @gne Fixes felixge/node-formidable#209 Fixes #5215
2013-04-08http: Support write(data, 'hex')isaacs
We were assuming that any string can be concatenated safely to CRLF. However, for hex, base64, or binary encoded writes, this is not the case, and results in sending the incorrect response. An unusual edge case, but certainly a bug.
2013-04-08crypto: fix constructor call in crypto streamsAndreas Madsen
When using some stream method on a lazy crypto stream, the transform constructor wasn't called. This caused the internal state object to be undefined.
2013-04-08net: account encoding in .byteLengthFedor Indutny
2013-04-08net: fix buffer iteration in bytesWrittenFedor Indutny
2013-04-07tls: Re-enable check of CN-ID in cert verificationTobias Müllerleile
RFC 6125 explicitly states that a client "MUST NOT seek a match for a reference identifier of CN-ID if the presented identifiers include a DNS-ID, SRV-ID, URI-ID, or any application-specific identifier types supported by the client", but it MAY do so if none of the mentioned identifier types (but others) are present.
2013-04-05stream: unused variableRafael Garcia
2013-04-05stream: remove vestiges of previous _transform APIRafael Garcia
2013-04-03http: Remove legacy ECONNRESET workaround codeisaacs
Fix #5179
2013-04-03child_process: acknowledge sent handlesFedor Indutny
Fix race-condition when multiple handles are sent and SCM_RIGHTS messages are gets merged by OS by avoiding sending multiple handles at once! fix #4885
2013-04-03assert: Simplify AssertError creationisaacs
2013-04-02http client: Ensure socket cleanup on response endisaacs
If an http response has an 'end' handler that throws, then the socket will never be released back into the pool. Granted, we do NOT guarantee that throwing will never have adverse effects on Node internal state. Such a guarantee cannot be reasonably made in a shared-global mutable-state side-effecty language like JavaScript. However, in this case, it's a rather trivial patch to increase our resilience a little bit, so it seems like a win. There is no semantic change in this case, except that some event listeners are removed, and the `'free'` event is emitted on nextTick, so that you can schedule another request which will re-use the same socket. From the user's point of view, there should be no detectable difference. Closes #5107
2013-04-01tls: Destroy socket when encrypted side closesisaacs
The v0.8 Stream.pipe() method automatically destroyed the destination stream whenever the src stream closed. However, this caused a lot of problems, and was removed by popular demand. (Many userland modules still have a no-op destroy() method just because of this.) It was also very hazardous because this would be done even if { end: false } was passed in the pipe options. In v0.10, we decided that the 'close' event and destroy() method are application-specific, and pipe() doesn't automatically call destroy(). However, TLS actually depended (silently) on this behavior. So, in this case, we should just go ahead and destroy the thing when close happens. Closes #5145
2013-04-01querystring: Removing unnecessary bindingMitar
Binding of `http_parser` in querystring isn't used anywhere and should be removed.
2013-03-31repl: use more readable RegExp syntax for spacesNathan Rajlich
This is just a cosmetic change really, nothing major.
2013-03-31repl: isSyntaxError() catches "strict mode" errorsNathan Rajlich
Closes #5178.
2013-03-29crypto: Pass options to ctor callsisaacs
2013-03-28tls: handle SSL_ERROR_ZERO_RETURNFedor Indutny
see #5004
2013-03-28setTimeout: do not calculate Timeout._when propertywicked
Dramatically improves Timer performance.
2013-03-28stream: Emit readable on ended streams via read(0)isaacs
cc: @mjijackson
2013-03-28stream: Handle late 'readable' event listenersisaacs
In cases where a stream may have data added to the read queue before the user adds a 'readable' event, there is never any indication that it's time to start reading. True, there's already data there, which the user would get if they checked However, as we use 'readable' event listening as the signal to start the flow of data with a read(0) call internally, we ought to trigger the same effect (ie, emitting a 'readable' event) even if the 'readable' listener is added after the first emission. To avoid confusing weirdness, only the *first* 'readable' event listener is granted this privileged status. After we've started the flow (or, alerted the consumer that the flow has started) we don't need to start it again. At that point, it's the consumer's responsibility to consume the stream. Closes #5141
2013-03-27tls: handle errors before calling C++ methodsFedor Indutny
Calling `this.pair.encrypted._internallyPendingBytes()` before handling/resetting error will result in assertion failure: ../src/node_crypto.cc:962: void node::crypto::Connection::ClearError(): Assertion `handle_->Get(String::New("error"))->BooleanValue() == false' failed. see #5058
2013-03-27domain: fix domain callback from MakeCallbackTrevor Norris
Since _tickCallback and _tickDomainCallback were both called from MakeCallback, it was possible for a callback to be called that required a domain directly to _tickCallback. The fix was to implement process.usingDomains(). This will set all applicable functions to their domain counterparts, and set a flag in cc to let MakeCallback know domain callbacks always need to be checked. Added test in own file. It's important that the test remains isolated.
2013-03-26child_process: don't emit same handle twiceBen Noordhuis
It's possible to read multiple messages off the parent/child channel. When that happens, make sure that recvHandle is cleared after emitting the first message so it doesn't get emitted twice.
2013-03-25crypto: make getCiphers() return non-SSL ciphersBen Noordhuis
Commit f53441a added crypto.getCiphers() as a function that returns the names of SSL ciphers. Commit 14a6c4e then added crypto.getHashes(), which returns the names of digest algorithms, but that creates a subtle inconsistency: the return values of crypto.getHashes() are valid arguments to crypto.createHash() but that is not true for crypto.getCiphers() - the returned values are only valid for SSL/TLS functions. Rectify that by adding tls.getCiphers() and making crypto.getCiphers() return proper cipher names.
2013-03-25child_process: fix sending utf-8 to child processBen Noordhuis
In process#send() and child_process.ChildProcess#send(), use 'utf8' as the encoding instead of 'ascii' because 'ascii' mutilates non-ASCII input. Correctly handle partial character sequences by introducing a StringDecoder. Sending over UTF-8 no longer works in v0.10 because the high bit of each byte is now cleared when converting a Buffer to ASCII. See commit 96a314b for details. Fixes #4999 and #5011.
2013-03-25stream: Fix early end in Writables on zero-length writesisaacs
Doing this causes problems: z.write(Buffer(0)); z.end(); Fix by not ending Writable streams while they're still in the process of writing something.
2013-03-24timer: fix off-by-one ms errorAlexey Kupershtokh
Fix #5103
2013-03-22stream: Fix stall in Transform under very specific conditionsGil Pedersen
The stall is exposed in the test, though the test itself asserts before it stalls. The test is constructed to replicate the stalling state of a complex Passthrough usecase since I was not able to reliable trigger the stall. Some of the preconditions for triggering the stall are: * rs.length >= rs.highWaterMark * !rs.needReadable * _transform() handler that can return empty transforms * multiple sync write() calls Combined this can trigger a case where rs.reading is not cleared when further progress requires this. The fix is to always clear rs.reading.