Opened 16 years ago

Closed 16 years ago

#2604 closed defect (fixed)

A GetObservation request with an invalid value in the result field, sent to a SOS 1.0.0 server must return an exception

Reported by: nsavard Owned by: tomkralidis
Priority: normal Milestone: 5.2 release
Component: SOS Server Version: svn-trunk (development)
Severity: normal Keywords: OGC, CITE, TEAM, SOS 1.0.0
Cc: assefa, jmckenna

Description

When a GetObservation request with an invalid value in the result field is sent to a SOS 1.0.0 server, an exception must be returned. Presently the server returned the following response:

<?xml version="1.0" encoding="ISO-8859-1"?>
<om:ObservationCollection xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:swe="http://www.opengis.net/swe/1.0.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sos="http://www.opengis.net/sos/1.0" xmlns:om="http://www.opengis.net/om/1.0" gml:id="Water" xsi:schemaLocation="http://www.opengis.net/om/1.0 http://schemas.opengis.net/om/1.0.0/om.xsd">
  <gml:description xmlns:gml="http://www.opengis.net/gml">This is for water</gml:description>
  <gml:name xmlns:gml="http://www.opengis.net/gml">Water</gml:name>
  <gml:boundedBy>
    <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
      <gml:lowerCorner>-141 42</gml:lowerCorner>
      <gml:upperCorner>-52 84</gml:upperCorner>
    </gml:Envelope>
  </gml:boundedBy>
  <om:member>
    <om:Observation>
      <om:samplingTime>
        <gml:TimeInstant>
          <gml:timePosition>2001-10-30T14:24:55Z</gml:timePosition>
        </gml:TimeInstant>
      </om:samplingTime>
      <om:procedure xlink:href="urn:ogc:def:procedure:35"/>
      <observedProperty>WaterQuality</observedProperty>
      <om:result>
        <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="371">
          <obs>
            <gml:boundedBy>
              <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:lowerCorner>-75 45</gml:lowerCorner>
                <gml:upperCorner>-75 45</gml:upperCorner>
              </gml:Envelope>
            </gml:boundedBy>
            <msGeometry>
              <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:pos>-75 45</gml:pos>
              </gml:Point>
            </msGeometry>
            <Value>89.9</Value>
          </obs>
        </gml:featureMember>
      </om:result>
    </om:Observation>
  </om:member>
  <om:member>
    <om:Observation>
      <om:samplingTime>
        <gml:TimeInstant>
          <gml:timePosition>2002-10-30T18:31:38Z</gml:timePosition>
        </gml:TimeInstant>
      </om:samplingTime>
      <om:procedure xlink:href="urn:ogc:def:procedure:35"/>
      <observedProperty>WaterQuality</observedProperty>
      <om:result>
        <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="377">
          <obs>
            <gml:boundedBy>
              <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:lowerCorner>-75 45</gml:lowerCorner>
                <gml:upperCorner>-75 45</gml:upperCorner>
              </gml:Envelope>
            </gml:boundedBy>
            <msGeometry>
              <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:pos>-75 45</gml:pos>
              </gml:Point>
            </msGeometry>
            <Value>93.9</Value>
          </obs>
        </gml:featureMember>
      </om:result>
    </om:Observation>
  </om:member>
  <om:member>
    <om:Observation>
      <om:samplingTime>
        <gml:TimeInstant>
          <gml:timePosition>2007-10-30T08:57:29Z</gml:timePosition>
        </gml:TimeInstant>
      </om:samplingTime>
      <om:procedure xlink:href="urn:ogc:def:procedure:2147"/>
      <observedProperty>WaterQuality</observedProperty>
      <om:result>
        <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="238">
          <obs>
            <gml:boundedBy>
              <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:lowerCorner>-79 43</gml:lowerCorner>
                <gml:upperCorner>-79 43</gml:upperCorner>
              </gml:Envelope>
            </gml:boundedBy>
            <msGeometry>
              <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:pos>-79 43</gml:pos>
              </gml:Point>
            </msGeometry>
            <Value>103.5</Value>
          </obs>
        </gml:featureMember>
      </om:result>
    </om:Observation>
  </om:member>
  <om:member>
    <om:Observation>
      <om:samplingTime>
        <gml:TimeInstant>
          <gml:timePosition>2003-10-30T07:37:29Z</gml:timePosition>
        </gml:TimeInstant>
      </om:samplingTime>
      <om:procedure xlink:href="urn:ogc:def:procedure:2147"/>
      <observedProperty>WaterQuality</observedProperty>
      <om:result>
        <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="297">
          <obs>
            <gml:boundedBy>
              <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:lowerCorner>-79 43</gml:lowerCorner>
                <gml:upperCorner>-79 43</gml:upperCorner>
              </gml:Envelope>
            </gml:boundedBy>
            <msGeometry>
              <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:pos>-79 43</gml:pos>
              </gml:Point>
            </msGeometry>
            <Value>93.5</Value>
          </obs>
        </gml:featureMember>
      </om:result>
    </om:Observation>
  </om:member>
  <om:member>
    <om:Observation>
      <om:samplingTime>
        <gml:TimeInstant>
          <gml:timePosition>2000-10-30T18:24:39Z</gml:timePosition>
        </gml:TimeInstant>
      </om:samplingTime>
      <om:procedure xlink:href="urn:ogc:def:procedure:604"/>
      <observedProperty>WaterQuality</observedProperty>
      <om:result>
        <gml:featureMember xmlns:gml="http://www.opengis.net/gml" gml:id="964">
          <obs>
            <gml:boundedBy>
              <gml:Envelope srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:lowerCorner>-122 49</gml:lowerCorner>
                <gml:upperCorner>-122 49</gml:upperCorner>
              </gml:Envelope>
            </gml:boundedBy>
            <msGeometry>
              <gml:Point srsName="urn:ogc:crs:epsg:4326" srsDimension="2">
                <gml:pos>-122 49</gml:pos>
              </gml:Point>
            </msGeometry>
            <Value>99.9</Value>
          </obs>
        </gml:featureMember>
      </om:result>
    </om:Observation>
  </om:member>
</om:ObservationCollection>

The relevant CITE test is: getObservation:core-SOS.GetObservation-RequestInvalidResult.1 (s0003) at http://cite.geoenterpriselab.com/teamengine/ Web page

Request sent is:

   URL: http://dev1.lan.mapgears.com/manwe/cgi-bin/mssos100_ogc_cite?
   Body: 
<GetObservation xmlns="http://www.opengis.net/sos/1.0" xmlns:ogc="http://www.opengis.net/ogc"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:ctl="http://www.occamlab.com/ctl"
                xmlns:parsers="http://www.occamlab.com/te/parsers"
                xmlns:xows="http://www.opengeospatial.net/ows"
                xmlns:xi="http://www.w3.org/2001/XInclude"
                xmlns:html="http://www.w3.org/1999/xhtml"
                xmlns:sos="http://www.opengis.net/sos/1.0"
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:te="java:com.occamlab.te.TECore"
                xmlns:sosFunctions="https://cite.opengeospatial.org/sos-1.0.0/src/ctl/functions.xml"
                xmlns:xlink="http://www.w3.org/1999/xlink"
                xmlns:getObservation="https://cite.opengeospatial.org/sos-1.0.0/src/ctl/GetObservation.xml"
                xmlns:gml="http://www.opengis.net/gml"
                xmlns:tml="http://www.opengis.net/tml"
                xmlns:om="http://www.opengis.net/om/1.0"
                xmlns:ows="http://www.opengis.net/ows/1.1"
                xmlns:tep="http://teamengine.sourceforge.net/parsers"
                service="SOS"
                version="1.0.0"
                xsi:schemaLocation="http://www.opengis.net/sos/1.0          http://schemas.opengis.net/sos/1.0.0/sosGetObservation.xsd">
         <offering>Water</offering>
         <observedProperty>WaterQuality</observedProperty>
         <result>
            <ogc:PropertyIsLessThan>
               <ogc:PropertyName/>
               <ogc:Literal/>
            </ogc:PropertyIsLessThan>
         </result>
         <responseFormat>text/xml; subtype=om/1.0.0</responseFormat>
      </GetObservation>

Change History (11)

comment:1 by tomkralidis, 16 years ago

Norm: this has been fixed in r7686, as part of #2379). Can you try now and verify?

comment:2 by nsavard, 16 years ago

Still there.

comment:3 by tomkralidis, 16 years ago

Assefa: does mapogcfilter.c check if values are empty:

<ogc:PropertyIsLessThan>
 <ogc:PropertyName/>
 <ogc:Literal/>
</ogc:PropertyIsLessThan>

?

comment:4 by tomkralidis, 16 years ago

Cc: assefa added

Assefa: see comment:3

comment:5 by assefa, 16 years ago

Tom,

From what I can see, we call FLTParseFilterEncoding in the mapogcsod.c and for "invalid" filter as in this example, the function should return NULL and we throw an exception. Is this not working?

comment:6 by tomkralidis, 16 years ago

It's not working. If the elements are empty, it's throwing a segfault:

[devgeo:/home/tkralidi/foss4g/mapserver/trunk/mapserver]$ gdb --args ./mapserv QUERY_STRING="map=../msautotest/wxs/sos.map&service=SOS&version=1.0.0&request=GetObservation&offering=Water&observedproperty=WaterQuality&responseformat=text/xml; subtype=om/1.0.0&result=<Filter><PropertyIsLessThan><PropertyName/><Literal/></PropertyIsLessThan></Filter>"
GNU gdb Red Hat Linux (6.6-16.fc7rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) r
Starting program: /home/tkralidi/foss4g/mapserver/trunk/mapserver/mapserv QUERY_STRING=map=../msautotest/wxs/sos.map\&service=SOS\&version=1.0.0\&request=GetObservation\&offering=Water\&observedproperty=WaterQuality\&responseformat=text/xml\;\ subtype=om/1.0.0\&result=\<Filter\>\<PropertyIsLessThan\>\<PropertyName/\>\<Literal/\>\</PropertyIsLessThan\>\</Filter\>
[Thread debugging using libthread_db enabled]
[New Thread -1208858928 (LWP 25015)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1208858928 (LWP 25015)]
0x0810cc4d in FLTInsertElementInNode (psFilterNode=0x9b6a658, psXMLNode=0x9b6a670) at mapogcfilter.c:1753
1753	                if (psTmpNode &&  psXMLNode->psChild && 
(gdb) bt
#0  0x0810cc4d in FLTInsertElementInNode (psFilterNode=0x9b6a658, psXMLNode=0x9b6a670) at mapogcfilter.c:1753
#1  0x0810db71 in FLTParseFilterEncoding (szXMLString=0x9b642f8 "<Filter><PropertyIsLessThan><PropertyName/><Literal/></PropertyIsLessThan></Filter>")
    at mapogcfilter.c:1252
#2  0x0812b1d2 in msSOSGetObservation (map=0x9b537c8, sosparams=0x9b64280) at mapogcsos.c:2184
#3  0x0812cd5a in msSOSDispatch (map=0x9b537c8, req=0x9b52d48) at mapogcsos.c:2695
#4  0x080ecc7c in msOWSDispatch (map=0x9b537c8, request=0x9b52d48, force_ows_mode=0) at mapows.c:100
#5  0x080567bf in main (argc=2, argv=0xbfa22094) at mapserv.c:1245
(gdb) 

comment:7 by assefa, 16 years ago

committed fix in r7715. Let me know.

comment:8 by tomkralidis, 16 years ago

Works now. ExceptionReport as expected. Thanks Assefa!

Norm: can you test and verify?

comment:9 by jmckenna, 16 years ago

Cc: jmckenna added

comment:10 by nsavard, 16 years ago

This is fixed.

comment:11 by tomkralidis, 16 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.