From e77913914dc258e925cb9e25f208b91e04c0fe0d Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 28 Jun 2011 08:18:54 +0000 Subject: [PATCH] fixed bug in search with size in MB. Caused crash due to deserialization error. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4347 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- libretroshare/src/dbase/rsexpr.cc | 76 +++++++++++++++------------- libretroshare/src/turtle/p3turtle.cc | 3 ++ 2 files changed, 43 insertions(+), 36 deletions(-) diff --git a/libretroshare/src/dbase/rsexpr.cc b/libretroshare/src/dbase/rsexpr.cc index 39859795c..8cd781d1c 100644 --- a/libretroshare/src/dbase/rsexpr.cc +++ b/libretroshare/src/dbase/rsexpr.cc @@ -208,14 +208,13 @@ Expression *LinearizedExpression::toExpr(const LinearizedExpression& e,int& n_to switch(tok) { - case EXPR_COMP: { - LogicalOperator op = static_cast(e._ints[n_ints++]) ; + case EXPR_DATE: { + RelOperator op = static_cast(e._ints[n_ints++]) ; + int lv = e._ints[n_ints++] ; + int hv = e._ints[n_ints++] ; - Expression *e1 = toExpr(e,n_tok,n_ints,n_strings) ; - Expression *e2 = toExpr(e,n_tok,n_ints,n_strings) ; - - return new CompoundExpression(op,e1,e2) ; - } + return new DateExpression(op,lv,hv) ; + } case EXPR_POP: { RelOperator op = static_cast(e._ints[n_ints++]) ; @@ -231,13 +230,6 @@ Expression *LinearizedExpression::toExpr(const LinearizedExpression& e,int& n_to return new SizeExpression(op,lv,hv) ; } - case EXPR_DATE: { - RelOperator op = static_cast(e._ints[n_ints++]) ; - int lv = e._ints[n_ints++] ; - int hv = e._ints[n_ints++] ; - - return new DateExpression(op,lv,hv) ; - } case EXPR_HASH: { std::list strings ; StringOperator op ; @@ -246,28 +238,7 @@ Expression *LinearizedExpression::toExpr(const LinearizedExpression& e,int& n_to readStringExpr(e,n_ints,n_strings,strings,b,op) ; return new HashExpression(op,strings) ; } - case EXPR_EXT: - { - std::list strings ; - StringOperator op ; - bool b ; - - readStringExpr(e,n_ints,n_strings,strings,b,op) ; - - return new ExtExpression(op,strings,b) ; - } - case EXPR_PATH: - { - std::list strings ; - StringOperator op ; - bool b ; - - readStringExpr(e,n_ints,n_strings,strings,b,op) ; - - return new ExtExpression(op,strings,b) ; - } - case EXPR_NAME: - { + case EXPR_NAME: { std::list strings ; StringOperator op ; bool b ; @@ -276,6 +247,39 @@ Expression *LinearizedExpression::toExpr(const LinearizedExpression& e,int& n_to return new NameExpression(op,strings,b) ; } + case EXPR_PATH: { + std::list strings ; + StringOperator op ; + bool b ; + + readStringExpr(e,n_ints,n_strings,strings,b,op) ; + + return new ExtExpression(op,strings,b) ; + } + case EXPR_EXT: { + std::list strings ; + StringOperator op ; + bool b ; + + readStringExpr(e,n_ints,n_strings,strings,b,op) ; + + return new ExtExpression(op,strings,b) ; + } + case EXPR_COMP: { + LogicalOperator op = static_cast(e._ints[n_ints++]) ; + + Expression *e1 = toExpr(e,n_tok,n_ints,n_strings) ; + Expression *e2 = toExpr(e,n_tok,n_ints,n_strings) ; + + return new CompoundExpression(op,e1,e2) ; + } + case EXPR_SIZE_MB: { + RelOperator op = static_cast(e._ints[n_ints++]) ; + int lv = e._ints[n_ints++] ; + int hv = e._ints[n_ints++] ; + + return new SizeExpressionMB(op,lv,hv) ; + } default: std::cerr << "No expression match the current value " << tok << std::endl ; return NULL ; diff --git a/libretroshare/src/turtle/p3turtle.cc b/libretroshare/src/turtle/p3turtle.cc index 419722c4a..49903eaa7 100644 --- a/libretroshare/src/turtle/p3turtle.cc +++ b/libretroshare/src/turtle/p3turtle.cc @@ -1918,6 +1918,9 @@ void RsTurtleRegExpSearchRequestItem::performLocalSearch(std::listSearchBoolExp(exp,initialResults,DIR_FLAGS_LOCAL | DIR_FLAGS_NETWORK_WIDE);