[GRASS-dev] [GRASS GIS] #2754: Handle corrupt data in r.gwflow and gpde library

GRASS GIS trac at osgeo.org
Sat Oct 10 07:53:02 PDT 2015


#2754: Handle corrupt data in r.gwflow and gpde library
------------------------------------------------+-------------------------
 Reporter:  wenzeslaus                          |      Owner:  grass-dev@…
     Type:  enhancement                         |     Status:  new
 Priority:  trivial                             |  Milestone:  7.1.0
Component:  Raster                              |    Version:  svn-trunk
 Keywords:  r.gwflow, gpde, libgpde, dirichlet  |        CPU:  All
 Platform:  All                                 |
------------------------------------------------+-------------------------
 Moving ''r.gwflow''-related discussion from #2750 to a separate ticket.

 In #2750 [comment:11:ticket:2750 sprice] suggested a simple improvement
 for ''r.gwflow'' and ''gpde'' library:
 > If you do a diff with
 [source:grass/trunk/lib/gpde/n_les_assemble.c#L1289 n_les_assemble.c]
 you'll see that I [attachment/ticket/2750/lz4_zstd4.tgz added] a few if
 statements to ensure that the indexing stays within row/col bounds. I was
 getting segfaults with corrupt data before I fixed the other bugs. I
 figure it should be able to handle any data without segfaulting, even if
 corrupt.

 This is a trivial change but I'm not sure if this is necessary. Let me
 throw out some questions. How you can get a corrupt data unless changing
 raster library? If we want this to handle corrupt data here, where else we
 want to do that? What is the appropriate `else` branch, nothing or fatal
 error?

 This is the change:

 {{{
 #!diff
  /*set the rows to zero */
 +if (count < les->rows)
      for (i = 0; i < les->cols; i++)
          les->A[count][i] = 0.0;
  /*set the cols to zero */
 +if (count < les->cols)
      for (i = 0; i < les->rows; i++)
          les->A[i][count] = 0.0;
  /*entry on the diagonal */
 +if (count < les->rows && count < les->cols)
      les->A[count][count] = 1.0;
 }}}

 The change is in `N_les_integrate_dirichlet_2d()` function which is used
 only in ''r.gwflow''.

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/2754>
GRASS GIS <https://grass.osgeo.org>



More information about the grass-dev mailing list