Bug report #17920

It is possible to use the raster calculator to crash QGIS

Added by Alister Hood over 2 years ago. Updated over 2 years ago.

Status:Closed
Priority:Normal
Assignee:Victor Olaya
Category:Processing/QGIS
Affected QGIS version:master Regression?:No
Operating System:Windows? Easy fix?:No
Pull Request or Patch supplied:No Resolution:fixed/implemented
Crashes QGIS or corrupts data:Yes Copied to github as #:25816

Description

e.g.
- enter a cell size and extents (if you don't there is no crash)
- enter a number as the expression
- run it and it will crash

I presume a number is an invalid expression, although I don't see why it couldn't be valid i.e. so you could use the raster calculator to create a raster filled with a single value.

But in any cash a crash should be avoided.

screenie 2.JPG - after running from main menu (i.e. no error or crash) (104 KB) Alister Hood, 2018-01-23 10:00 PM

screenie 1.JPG - before running from main menu (144 KB) Alister Hood, 2018-01-23 10:00 PM

Associated revisions

Revision c09c3018
Added by Alexander Bruy over 2 years ago

[processing] throw error if no layers selected in raster calculator
algorithm (refs #17920)

History

#1 Updated by Denis Rouzaud over 2 years ago

Tried both on master and qgis 2.18 and could not reproduce.

#2 Updated by Alister Hood over 2 years ago

Sorry, I didn't realise, but master still includes the old raster calculator (accessible from the main menu). With that it is a valid expression, producing the output you would expect. Even something like "jkl" (with the quotes) or "" is a valid expression (producing a raster filled with nan). That calculator also validates the expression and won't let you run it with an invalid expression.

To be clear, this bug is about the new processing raster calculator. This doesn't validate the expression as it is entered, so it is possible to run it with an invalid expression. It seems that it crashes QGIS with any expression that doesn't use an existing raster. If the expression uses an existing raster then it doesn't crash, even if the existing raster is not in the specified extent.

FWIW I am using 64bit master from OSGeo4W
Still reproducible on fcbf4cb1f1, but I was on an earlier build when I reported it.

#3 Updated by Alister Hood over 2 years ago

As I mentioned, if you don't fill in the cell size and extents and you try to run it with an invalid expression then instead of crashing it produces an error message:

Traceback (most recent call last): File "C:/OSGEO4~1/apps/qgis-dev/./python/plugins\processing\algs\qgis\RasterCalculator.py", line 150, in processAlgorithm raise QgsProcessingException(self.tr("No layers selected")) _core.QgsProcessingException: No layers selected 

Execution failed after 0.03 seconds

Loading resulting layers
The following layers were not correctly generated.
C:/Users/alistair/AppData/Local/Temp/processing_cca6cb7ace2a453aaaa4a4de25d0422c/f788bbd00a2d4b5f8bb5e7287c67c26e/OUTPUT.tif
You can check the 'Log Messages Panel' in QGIS main window to find more information about the execution of the algorithm.

#4 Updated by Alexander Bruy over 2 years ago

This is not a Processing issue. Raster calculator can not be used without input layers. You can easily check this by running native raster calculator using "correct" expression but without loaded layers.

#5 Updated by Alister Hood over 2 years ago

Alexander Bruy wrote:

This is not a Processing issue.

I can't comment on that, other than that it is an issue that only occurs when using the raster calculator via Processing rather than via the main menu (Raster>Raster Calculator)

Raster calculator can not be used without input layers. You can easily check this by running native raster calculator using "correct" expression but without loaded layers.

The Raster calculator in the main menu certainly can. I just tested it again to double-check. See the screenshots.

#6 Updated by Alexander Bruy over 2 years ago

  • Status changed from Open to Closed

Works in master

#7 Updated by Alister Hood over 2 years ago

  • Status changed from Closed to Reopened
  • Operating System set to Windows?

Still crashes here on Windows 10 (64bit osgeo4w fcb50a6857). I turned off all plugins other than processing, in case they were an issue, and tried deleting the QGIS folder under AppData\Local (although it seems there must still be settings in the registry or somewhere, because it still remembered my recently used algorithms).
But it did work when I tested on a different Windows 10 machine a week ago, and also on Ubuntu...

#8 Updated by Mathieu Pellerin - nIRV over 2 years ago

Give it a try again in the next nightly update. I've updated the algorithm logic, hopefully it'll deal with your issue as well.

#9 Updated by Alister Hood over 2 years ago

  • Resolution set to fixed/implemented
  • Status changed from Reopened to Closed

Looks good... I wasn't able to test Windows build 2.99.0-292 on the original machine at work (Trend Micro thinks it is a virus).
But it works on the second test machine, and downgrading to 2.99.0-291 crashes there too.

Also available in: Atom PDF