From 0829ecdafa17d82de1fbe782eb065f1926e7d6c6 Mon Sep 17 00:00:00 2001 From: Heikki Levanto Date: Wed, 20 May 2015 13:52:41 +0200 Subject: [PATCH] MPSPARQL-22: Fix segv when past result set --- src/filter_sparql.cpp | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/filter_sparql.cpp b/src/filter_sparql.cpp index 2ff3cf4..18520bd 100644 --- a/src/filter_sparql.cpp +++ b/src/filter_sparql.cpp @@ -673,8 +673,10 @@ Z_Records *yf::SPARQL::Session::explain_fetch( int i; for (i = 0; i < number; i++) { - int idx = start + i - 1; - ConfPtr cp = fset->explaindblist[ idx]; + unsigned int idx = start + i - 1; + if ( idx >= fset->explaindblist.size() ) + break; + ConfPtr cp = fset->explaindblist[idx]; package.log("sparql", YLOG_LOG, "fetch explain %d:%s", idx, cp->db.c_str() ); mp::wrbuf w; wrbuf_puts(w,"\n"); @@ -696,7 +698,7 @@ Z_Records *yf::SPARQL::Session::explain_fetch( } rec->u.databaseOrSurDiagnostics->num_records = i; *number_returned = i; - if (start + number > fset->hits) + if (start + number > (int)fset->explaindblist.size()) *next_position = 0; else *next_position = start + number; @@ -730,20 +732,6 @@ Z_APDU *yf::SPARQL::Session::explain_search(mp::Package &package, package.log("sparql", YLOG_LOG, "Explain %d: '%s'", numbases, (*it)->db.c_str() ); fset->explaindblist.push_back(*it); -/* - //yf::SPARQL::Result res; - //res.conf = *it; - std::string z = - "" - "" - "" + - (*it)->db + - "" - "" - ""; - //res.doc = xmlParseMemory(z.c_str(), z.size()); - dblist.push_back(z); -*/ } int number_returned = 0; int next_position = 0; -- 1.7.10.4