From 261fa3620fcaf0072e88b775f97b3fa9a980f201 Mon Sep 17 00:00:00 2001 From: Evan Lucas Date: Fri, 27 Feb 2015 16:47:29 -0600 Subject: [PATCH] src: fix intermittent SIGSEGV in resolveTxt Fixes a SIGSEGV by making sure `txt_chunk` is not empty before setting it on `txt_records` Fixes: https://github.com/joyent/node/issues/9285 PR-URL: https://github.com/joyent/node/pull/9300 Reviewed-By: cjihrig - Colin Ihrig Reviewed-By: jasnell - James M Snell --- src/cares_wrap.cc | 5 +++-- test/internet/test-dns-txt-sigsegv.js | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 test/internet/test-dns-txt-sigsegv.js diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc index 1764374c12..a6d0dcd8a9 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -633,8 +633,9 @@ class QueryTxtWrap: public QueryWrap { } txt_chunk->Set(j++, txt); } - // Push last chunk - txt_records->Set(i, txt_chunk); + // Push last chunk if it isn't empty + if (!txt_chunk.IsEmpty()) + txt_records->Set(i, txt_chunk); ares_free_data(txt_out); diff --git a/test/internet/test-dns-txt-sigsegv.js b/test/internet/test-dns-txt-sigsegv.js new file mode 100644 index 0000000000..75d34c21c0 --- /dev/null +++ b/test/internet/test-dns-txt-sigsegv.js @@ -0,0 +1,8 @@ +var common = require('../common'); +var assert = require('assert'); +var dns = require('dns'); + +dns.resolveTxt('www.microsoft.com', function(err, records) { + assert.equal(err, null); + assert.equal(records.length, 0); +});