[mapserver-users] Expression segmentation fault

Frank Broniewski brfr at metrico.lu
Thu Sep 5 06:49:11 PDT 2013


Ok, this is weird. It is, as I know now, data source related. I was 
poking in the layer configuration to find out why the core dump happens. 
Reinstalling didn't solve the issue, btw.

So first I converted the data to shapefile with ogr2ogr (as always very 
handy!) and changed the layer accordingly. And no core dump happened!
Then I tried several versions of the data and filter statements without 
success.
Since this is a osm2pgsql database I swapped finally the table from 
planet_osm_polygon to planet_osm_line (same table schema apart from the 
geometry) - and voilà - no core dump.

So I can relate the problem to the planet_osm_polygon table - but I'm 
not sure what difference actually is responsible for the crash ...

The most apparent difference is of course the geometry type: 
planet_osm_line is linestring, planet_osm_polygon is geometry ...

I will investigate the attributes further tomorrow, but now I need to 
earn some money. It's always the deadlines ...


Frank


Am 2013-09-05 09:47, schrieb thomas bonfort:
> Frank,
> This is such a simple use-case that I doubt it's a bug in the code
> per-se. Can you make sure that you are using a clean build (make clean
> && make && make install) as I suspect this could be happening due to a
> compilation problem (as a rule of thumb, with mapserver <6.4, always
> run make clean after re-running configure)
>
> --
> thomas
>
>
> On Wed, Sep 4, 2013 at 2:39 PM, Frank Broniewski <brfr at metrico.lu> wrote:
>> Am 2013-09-04 14:33, schrieb thomas bonfort:
>>
>>> Frank, please supply a backtrace of the crash (`bt` in gdb once it has
>>> halted at the segfault)
>>>
>>> --
>>> thomas
>>>
>>> On Wed, Sep 4, 2013 at 2:25 PM, Frank Broniewski <brfr at metrico.lu> wrote:
>>>>
>>>> Hi,
>>>>
>>>> I just updated my mapserver installation to the latest version (6.2.1).
>>>> I'm
>>>> running FreeBSD 9.1 and I'm getting a segmentation fault related to
>>>> expression usage in my mapfile. I've already compiled mapserver with
>>>> debug
>>>> symbols and I loaded the core file into gdb:
>>>>
>>>>> gdb /usr/local/www/apache22/cgi-bin/mapserv mapserv.core
>>>>
>>>> <snip>
>>>> Reading symbols from /lib/libc.so.7...done.
>>>> Loaded symbols for /lib/libc.so.7
>>>> Reading symbols from /usr/local/lib/libintl.so.9...done.
>>>> Loaded symbols for /usr/local/lib/libintl.so.9
>>>> Reading symbols from /usr/lib/libsupc++.so.1...done.
>>>> Loaded symbols for /usr/lib/libsupc++.so.1
>>>> Reading symbols from /libexec/ld-elf.so.1...done.
>>>> Loaded symbols for /libexec/ld-elf.so.1
>>>> #0  0x00000008008e2520 in yylex (lvalp=0x7fffffffd250, p=0x7fffffffd3b0)
>>>> at
>>>> mapparser.y:649
>>>> 649     mapparser.y: No such file or directory.
>>>>           in mapparser.y
>>>> [New Thread 809007400 (LWP 101134/mapserv)]
>>>>
>>>> So apparently there seems to be a file missing!? Looking at the source
>>>> code
>>>> (git), line 649 is a blank line, so I'm not sure what's missing exactly.
>>>> I've got yacc, bison and flex installed. For testing purposes I'm using
>>>> the
>>>> mapserver cgi on the command line:
>>>>
>>>> /usr/local/www/apache22/cgi-bin/mapserv -nh
>>>>
>>>> "QUERY_STRING=map=/data/web/mapserver/cnra/cnra.map&mode=map&layer=boundaries"
>>>>
>>>> The boundaries layer:
>>>>
>>>> Layer
>>>>
>>>> #    Classitem "level"
>>>>       Connection "host=10.0.0.2 dbname=osm user=user password=guessme"
>>>>       Connectiontype Postgis
>>>>       Data "geom FROM (SELECT osm_id, way AS geom, name, admin_level AS
>>>> level,
>>>> tags FROM planet_osm_polygon) AS foo USING UNIQUE osm_id USING SRID=3857"
>>>>       Filter "tags ?& ARRAY['boundary', 'admin_level']"
>>>>       Name "boundaries"
>>>>       Processing "CLOSE_CONNECTION=DEFER"
>>>>       Status on
>>>>       Type line
>>>>       Units meters
>>>>
>>>>       Metadata
>>>>           "ows_title" "Boundary Map"
>>>>           "ows_abstract" "Boundary map - data from OpenStreetMap, ODbl
>>>> licensed"
>>>>       End
>>>>
>>>>       Projection
>>>>           "init=epsg:3857"
>>>>       End
>>>>
>>>>       Class
>>>>
>>>>           Expression ("[level]" = "6")
>>>> #        Expression "6"
>>>>           Name "communes"
>>>>
>>>>           Style
>>>>               Color 10 10 10
>>>>               Opacity 50
>>>>               Width 2
>>>>           End
>>>>
>>>>       End
>>>> End
>>>>
>>>>
>>>> The classitem / simple expression (Expression "6") works with the
>>>> mapserver
>>>> cgi, but python mapscript throws an error: _mapscript.MapServerError:
>>>> msEvalExpression(): General error message. Invalid item index.
>>>>
>>>> I've read the mapserver expressions documentation [1] and the note that
>>>> says
>>>> something about the working environment might be linked to more than one
>>>> expression library. But my operating system skills are not high enough to
>>>> turn this paragraph into something useful for me.
>>>>
>>>> So any help is greatly appreciated.
>>>>
>>>> Frank
>>>>
>>>>
>>>> Frank BRONIEWSKI
>>>>
>>>> METRICO s.à r.l.
>>>> géomètres
>>>> technologies d'information géographique
>>>> rue des Romains 36
>>>> L-5433 NIEDERDONVEN
>>>>
>>>> tél.: +352 26 74 94 - 28
>>>> fax.: +352 26 74 94 99
>>>> http://www.metrico.lu
>>>> _______________________________________________
>>>> mapserver-users mailing list
>>>> mapserver-users at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/mapserver-users
>>>
>>>
>>>
>>
>> Hi Thomas,
>>
>> thanks for the fast response! Here's the bt:
>>
>> (gdb) bt
>>
>> #0  0x00000008008e2520 in yylex (lvalp=0x7fffffffd250, p=0x7fffffffd3b0) at
>> mapparser.y:649
>> #1  0x00000008008e0146 in yyparse (p=0x7fffffffd3b0) at mapparser.c:1500
>> #2  0x00000008009239b2 in msEvalExpression (layer=0x809009000,
>> shape=0x7fffffffd4e0,
>>      expression=0x8090a0280, itemindex=-1) at maputil.c:478
>> #3  0x0000000800923f03 in msShapeGetClass (layer=0x809009000,
>> map=0x8090bd800,
>>      shape=0x7fffffffd4e0, classgroup=0x0, numclasses=1) at maputil.c:581
>> #4  0x0000000800980ab2 in msDrawVectorLayer (map=0x8090bd800,
>> layer=0x809009000, image=0x8090a91c0)
>>      at mapdraw.c:989
>> #5  0x00000008009800ed in msDrawLayer (map=0x8090bd800, layer=0x809009000,
>> image=0x8090a91c0)
>>      at mapdraw.c:808
>> #6  0x000000080097ed18 in msDrawMap (map=0x8090bd800, querymap=0) at
>> mapdraw.c:437
>> #7  0x0000000800a16e6e in msCGIDispatchImageRequest (mapserv=0x8090b2300) at
>> mapservutil.c:1448
>> #8  0x0000000800a179c2 in msCGIDispatchRequest (mapserv=0x8090b2300) at
>> mapservutil.c:1690
>> #9  0x00000000004012c1 in main (argc=3, argv=0x7fffffffd9f0) at
>> mapserv.c:259
>> (gdb)
>>
>>
>>
>>
>> --
>> Frank BRONIEWSKI
>>
>> METRICO s.à r.l.
>> géomètres
>> technologies d'information géographique
>> rue des Romains 36
>> L-5433 NIEDERDONVEN
>>
>> tél.: +352 26 74 94 - 28
>> fax.: +352 26 74 94 99
>> http://www.metrico.lu
>
>


-- 
Frank BRONIEWSKI

METRICO s.à r.l.
géomètres
technologies d'information géographique
rue des Romains 36
L-5433 NIEDERDONVEN

tél.: +352 26 74 94 - 28
fax.: +352 26 74 94 99
http://www.metrico.lu


More information about the mapserver-users mailing list