Tree:
2ff2a74ef6
fix-windows-spawn
gh-pages
gracefull-invalid-url
greenkeeper-update-all
internal
master
uncork
2.5.0-1
v.2.0.0
v.2.0.1
v.2.1.0
v.2.2.0
v.2.2.2
v.2.2.3
v.2.2.4
v.2.2.5
v.2.3.0
v.2.3.1
v.2.4.0
v.2.4.1
v.2.4.2
v.2.5.0
v.2.5.1
v.2.5.2
v.2.5.3
v.2.6.0
v.2.6.0-0
v.2.6.0-1
v.2.6.0-2
v.2.6.1
v.2.6.2
v.2.6.3
v.2.6.4
v.2.6.5
v.2.7.0
v.2.7.1
v0.10.0
v0.10.1
v0.10.2
v0.10.3
v0.11.0
v0.12.0
v0.12.1
v0.3.5
v0.3.6
v0.3.7
v0.3.9
v0.4.0
v0.4.1
v0.5.0
v0.5.1
v0.5.10
v0.5.11
v0.5.2
v0.5.3
v0.5.4
v0.5.5
v0.5.6
v0.5.8
v0.5.9
v0.6.0
v0.6.1
v0.6.2
v0.6.5
v0.6.7
v0.7.0
v0.7.1
v0.7.2
v0.8.0
v0.8.1
v0.8.3
v0.8.4
v0.8.5
v0.8.6
v0.9.0
v0.9.1
v0.9.2
v1.0.0
${ noResults }
1 Commits (2ff2a74ef6cfe8289752e8fbcc7d2f60610088db)
Author | SHA1 | Message | Date |
---|---|---|---|
DTrejo | 64702f18c1 |
rename tests to benches for clarity
|
12 years ago |
Felix Geisendörfer | fbc1642461 |
Fix: Hiredis parser traps pubsub event exceptions
While using this module with the hiredis parser, I noticed that exceptions thrown inside of subscribe/message/etc. callbacks would be reported as parser error exceptions, which was confusing. Example: ``` var client = require('./index').createClient(); client.on('subscribe', function() { throw new Error('My Error'); }); client.subscribe('channel'); ``` I would expect the above to throw 'My Error' as a simple exception, however, when using the hiredis parser I get: ``` events.js:45 throw arguments[1]; // Unhandled 'error' event ^ Error: Redis reply parser error: Error: My Error at RedisClient.<anonymous> (/Users/felix/code/node_redis/hiredis.js:4:9) at RedisClient.emit (events.js:67:17) at RedisClient.return_reply (/Users/felix/code/node_redis/index.js:457:22) at HiredisReplyParser.<anonymous> (/Users/felix/code/node_redis/index.js:220:14) at HiredisReplyParser.emit (events.js:64:17) at HiredisReplyParser.execute (/Users/felix/code/node_redis/lib/parser/hiredis.js:35:22) at RedisClient.on_data (/Users/felix/code/node_redis/index.js:365:27) at Socket.<anonymous> (/Users/felix/code/node_redis/index.js:58:14) ... ``` The attached patch fixes this problem by changing the way the HiredisReplyParser traps exceptions, and also provides a unit test for it. Please let me know if you need any tweaks on the patch for landing it, I was not quite sure where to put my test / how to structure it, since most test cases seem to be integration tests at this point. Also, if you would prefer an integration test for this, here you go: ``` javascript var client = require('./index').createClient(); var assert = require('assert'); process.on('uncaughtException', function listener(err) { process.removeListener('uncaughtException', listener); // Drop the stack, otherwise the assert gets trapped by node process.nextTick(function() { assert.ok(!/parser error/.test(err.message), err.message); client.quit(); }); }); client.on('subscribe', function() { throw new Error('My Error'); }); client.subscribe('channel'); ``` PS: If you wonder why this only affects pubsub events: This is because RedisClient#return_reply does exception trapping differently for events than it does for callbacks. See: |
13 years ago |