From 00b72547cf1d49b4737ffefa379307fc5904e045 Mon Sep 17 00:00:00 2001 From: patrik Date: Thu, 11 Aug 2011 09:28:09 +0000 Subject: [PATCH] Fixed bugs with empty resultsets returning data [Patrik] --- nselib/tns.lua | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/nselib/tns.lua b/nselib/tns.lua index d2118579a..2f81ead89 100644 --- a/nselib/tns.lua +++ b/nselib/tns.lua @@ -912,6 +912,13 @@ Packet.Query = { local val, len pos, len = bin.unpack("C", tns.data, pos) pos, val = bin.unpack("A" .. len, tns.data, pos) + + -- if we're at the first row and first column and the len is 0 + -- assume we got an empty resultset + if ( len == 0 and #result.rows == 0 and i == 1 ) then + return true, { data = result, moredata = false } + end + local sql_type = result.types[i] if ( DataTypeDecoders[sql_type] ) then val = DataTypeDecoders[sql_type](val) @@ -920,7 +927,18 @@ Packet.Query = { end table.insert(result.rows, row) - return true, result + local moredata = true + -- check if we've got any more data? + if ( #data > pos + 97 ) then + local len, err + pos, len = bin.unpack(">S", data, pos + 97) + pos, err = bin.unpack("A" .. len, data, pos) + if ( err:match("^ORA%-01403") ) then + moredata = false + end + end + + return true, { data = result, moredata = moredata } end, } @@ -1488,6 +1506,9 @@ Helper = { return false, result end + if ( not(result.moredata) ) then return true, result.data end + result = result.data + repeat local data status, data = self.comm:exchTNSPacket( Packet.QueryResponseAck:new(result) )