Fix crash in record conv rule select YAZ-812
[yaz-moved-to-github.git] / src / rpn2solr.c
index 332ae88..1a39204 100644 (file)
@@ -228,9 +228,14 @@ static int emit_term(solr_transform_t ct, WRBUF w, Z_Term *term, Odr_int trunc)
         size_t i;
         int must_quote = 0;
 
-        for (i = 0 ; i < lterm; i++)
-            if (sterm[i] == ' ')
-                must_quote = 1;
+        if (lterm == 0)
+            must_quote = 1;
+        else
+        {
+            for (i = 0 ; i < lterm; i++)
+                if (sterm[i] == ' ')
+                    must_quote = 1;
+        }
         if (must_quote)
             wrbuf_puts(w, "\"");
         if (trunc == 2 || trunc == 3)
@@ -393,21 +398,32 @@ static int rpn2solr_structure(solr_transform_t ct,
     }
 }
 
+int solr_transform_rpn2solr_stream_r(solr_transform_t ct,
+                                     WRBUF addinfo,
+                                     void (*pr)(const char *buf, void *client_data),
+                                     void *client_data,
+                                     Z_RPNQuery *q)
+{
+    int r = rpn2solr_structure(ct, pr, client_data, q->RPNStructure,
+                               /* nested*/ 0, addinfo);
+    if (!r)
+        wrbuf_rewind(addinfo);
+    return r;
+}
+
 int solr_transform_rpn2solr_stream(solr_transform_t ct,
                                    void (*pr)(const char *buf, void *client_data),
                                    void *client_data,
                                    Z_RPNQuery *q)
 {
-    int r;
     WRBUF w = wrbuf_alloc();
-    r = rpn2solr_structure(ct, pr, client_data, q->RPNStructure, 0, w);
+    int r = solr_transform_rpn2solr_stream_r(ct, w, pr, client_data, q);
     if (r)
-        solr_transform_set_error(ct, r, 0);
+        solr_transform_set_error(ct, r, wrbuf_len(w) ? wrbuf_cstr(w) : 0);
     wrbuf_destroy(w);
     return r;
 }
 
-
 int solr_transform_rpn2solr_wrbuf(solr_transform_t ct,
                                   WRBUF w,
                                   Z_RPNQuery *q)