Skip to content

Commit d64282d

Browse files
authoredMay 27, 2019
Merge pull request #29965 from elpaso/bugfix-29824-rastercalc-invalid-exp
Fix raster calculator invalid expressions
2 parents 169e246 + 892ccfe commit d64282d

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed
 

‎src/analysis/raster/qgsrastercalclexer.ll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#ifdef _MSC_VER
3737
#define YY_NO_UNISTD_H
3838
#endif
39+
3940
%}
4041

4142
white [ \t\r\n]+
@@ -80,8 +81,12 @@ raster_band_ref_quoted \"(\\.|[^"])*\"
8081
{raster_band_ref_quoted} { return RASTER_BAND_REF; }
8182
8283
{white} /* skip blanks and tabs */
84+
85+
[a-z][a-z0-9_]* { return yytext[0]; } /* other unknown tokens */
86+
8387
%%
8488
89+
8590
void set_raster_input_buffer(const char* buffer)
8691
{
8792
raster_scan_string(buffer);

‎tests/src/analysis/testqgsrastercalculator.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,20 @@ void TestQgsRasterCalculator::findNodes()
573573
QCOMPARE( _test( QStringLiteral( "2 + 3" ), QgsRasterCalcNode::Type::tNumber ).length(), 2 );
574574
QCOMPARE( _test( QStringLiteral( "2 + 3" ), QgsRasterCalcNode::Type::tOperator ).length(), 1 );
575575

576+
// Test parser with valid and invalid expressions
577+
QString errorString;
578+
const QgsRasterCalcNode *node { QgsRasterCalcNode::parseRasterCalcString( QString( ), errorString ) };
579+
QVERIFY( ! node );
580+
QVERIFY( ! errorString.isEmpty() );
581+
errorString = QString();
582+
node = QgsRasterCalcNode::parseRasterCalcString( QStringLiteral( "log10(2)" ), errorString );
583+
QVERIFY( node );
584+
QVERIFY( errorString.isEmpty() );
585+
errorString = QString();
586+
node = QgsRasterCalcNode::parseRasterCalcString( QStringLiteral( "not_a_function(2)" ), errorString );
587+
QVERIFY( ! node );
588+
QVERIFY( ! errorString.isEmpty() );
589+
576590
}
577591

578592
void TestQgsRasterCalculator::testRasterEntries()

0 commit comments

Comments
 (0)
Please sign in to comment.