From: Heikki Levanto Date: Wed, 20 May 2015 11:52:41 +0000 (+0200) Subject: MPSPARQL-22: Fix segv when past result set X-Git-Tag: v0.6~11 X-Git-Url: http://jsfdemo.indexdata.com/?a=commitdiff_plain;h=0829ecdafa17d82de1fbe782eb065f1926e7d6c6;p=mp-sparql-moved-to-github.git MPSPARQL-22: Fix segv when past result set --- 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;