From e435a0114d973231f44b10edbff583210e975510 Mon Sep 17 00:00:00 2001 From: Evan Lucas Date: Wed, 25 Feb 2015 16:59: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` PR-URL: https://github.com/iojs/io.js/pull/960 Reviewed-By: Rod Vagg --- 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 373675f0f0d724..c73f8c05cbc12d 100644 --- a/src/cares_wrap.cc +++ b/src/cares_wrap.cc @@ -611,8 +611,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 00000000000000..75d34c21c06dd8 --- /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); +});