fix empty expressions in dvb list search
[enigma2.git] / lib / dvb / db.cpp
index 1f38d152d3593b77bd34b4cee5c881dc51c0fc0c..244c2f0cc42d8c67a2e50bdeabd1886b6e2aca43 100644 (file)
@@ -209,6 +209,9 @@ int eDVBService::checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQ
        case eDVBChannelQuery::tOR:
                res = checkFilter(ref, *query.m_p1) || checkFilter(ref, *query.m_p2);
                break;
+       case eDVBChannelQuery::tAny:
+               res = 1;
+               break;
        }
 
        if (query.m_inverse)
@@ -1016,6 +1019,13 @@ static int decodeType(const std::string &type)
 RESULT parseExpression(ePtr<eDVBChannelQuery> &res, std::list<std::string>::const_iterator begin, std::list<std::string>::const_iterator end)
 {
        std::list<std::string>::const_iterator end_of_exp;
+       
+       if (begin == end)
+       {
+               eDebug("empty expression!");
+               return 0;
+       }
+       
        if (*begin == "(")
        {
                end_of_exp = begin;
@@ -1232,6 +1242,13 @@ RESULT eDVBChannelQuery::compile(ePtr<eDVBChannelQuery> &res, std::string query)
                /* now we recursivly parse that. */
        int r = parseExpression(res, tokens.begin(), tokens.end());
        
+               /* we have an empty (but valid!) expression */
+       if (!r && !res)
+       {
+               res = new eDVBChannelQuery();
+               res->m_type = eDVBChannelQuery::tAny;
+       }
+       
        if (res)
        {
                res->m_sort = sort;