Fail decoding of SRU SOAP searchRetrieveRequest if queries are omitted
[yaz-moved-to-github.git] / src / srw.c
index aaadd43..197a5de 100644 (file)
--- a/src/srw.c
+++ b/src/srw.c
@@ -1,8 +1,8 @@
 /*
- * Copyright (C) 1995-2005, Index Data ApS
+ * Copyright (C) 1995-2006, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: srw.c,v 1.46 2006-07-06 10:17:54 adam Exp $
+ * $Id: srw.c,v 1.49 2006-10-24 08:07:02 adam Exp $
  */
 /**
  * \file srw.c
@@ -539,10 +539,7 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data,
         if (method->type != XML_ELEMENT_NODE)
             return -1;
 
-        *p = (Z_SRW_PDU *) odr_malloc(o, sizeof(**p));
-        (*p)->srw_version = odr_strdup(o, "1.1");
-        (*p)->username = 0;
-        (*p)->password = 0;
+        *p = yaz_srw_get_core_v_1_1(o);
         
         if (!xmlStrcmp(method->name, BAD_CAST "searchRetrieveRequest"))
         {
@@ -607,6 +604,11 @@ int yaz_srw_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data,
                                            &req->database))
                     ;
             }
+            if (!req->query.cql && !req->query.pqf && !req->query.xcql)
+            {
+                /* should put proper diagnostic here */
+                return -1;
+            }
         }
         else if (!xmlStrcmp(method->name, BAD_CAST "searchRetrieveResponse"))
         {
@@ -968,8 +970,7 @@ int yaz_ucp_codec(ODR o, void * vptr, Z_SRW_PDU **handler_data,
         if (method->type != XML_ELEMENT_NODE)
             return -1;
 
-        *p = (Z_SRW_PDU *) odr_malloc(o, sizeof(**p));
-        (*p)->srw_version = odr_strdup(o, "1.1");
+        *p = yaz_srw_get_core_v_1_1(o);
         
         if (!xmlStrcmp(method->name, BAD_CAST "updateRequest"))
         {