[GRASSLIST:9844] Re: r.mapcalc causing segmentation violation

Ralf Gerlich ralf.gerlich at bsse.biz
Sun Jan 15 17:12:51 EST 2006


Hi again,

I have dug a little deeper and realised that it's not the NULL_ROWS, but 
the fd that is wrong.

> #1  0xb7f5cd7d in get_null_value_row (fd=0, flags=0x80851f0 "\001\001\001",
>     row=1, with_mask=1) at get_row.c:1021
> #2  0xb7f5d35a in get_map_row (fd=0, rast=0x805f360, row=1, data_type=1,
>     null_is_zero=0, with_mask=1) at get_row.c:1067
> #3  0x08055b9d in read_row (fd=0, buf=0x805f360 "", row=1, dummy=0)
>     at map.c:227

All these have fd=0, which seems odd, as the fd in the source map 
structure is originally !=0.

Digging further I found that this happened in column_shift due to 
missing breaks in the col<0 part. Adding the breaks fixed the crash.

I have attached the very small patch.

Best regards,
Ralf Gerlich
-------------- next part --------------
? raster/r.mapcalc/OBJ.i486-pc-linux-gnu
? raster/r.mapcalc/lex.yy.c
? raster/r.mapcalc/y.tab.c
? raster/r.mapcalc/y.tab.h
Index: raster/r.mapcalc/column_shift.c
===================================================================
RCS file: /home/grass/grassrepository/grass6/raster/r.mapcalc/column_shift.c,v
retrieving revision 2.1
diff -u -r2.1 column_shift.c
--- raster/r.mapcalc/column_shift.c	2 Jan 2006 22:23:32 -0000	2.1
+++ raster/r.mapcalc/column_shift.c	15 Jan 2006 21:52:22 -0000
@@ -69,6 +69,7 @@
 
             for (; i >= 0; i--)
                 SET_NULL_C(&ibuf[i]);
+	    break;
 
         case FCELL_TYPE:
             for (i = columns - 1; i >= col; i--) {
@@ -80,6 +81,7 @@
 
             for (; i >= 0; i--)
                 SET_NULL_F(&fbuf[i]);
+	    break;
 
         case DCELL_TYPE:
             for (i = columns - 1; i >= col; i--) {
@@ -91,6 +93,8 @@
 
             for (; i >= 0; i--)
                 SET_NULL_D(&dbuf[i]);
+	    break;
+
         }
     }
 }


More information about the grass-user mailing list