X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzoom-c.c;h=dc1dc0c534f054654f74aac4a709ff2d5c35aea4;hb=c6b8edd2312a4606cc014738266059a20e3b6e61;hp=d0f504207daf031b5a8ee358d7e41d253c81b24c;hpb=dd6da3de6292dd8d087eac67c0c9a7eced8b88de;p=yaz-moved-to-github.git diff --git a/src/zoom-c.c b/src/zoom-c.c index d0f5042..dc1dc0c 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -1635,12 +1635,19 @@ static zoom_ret ZOOM_connection_send_search(ZOOM_connection c) yaz_iconv_t cd = yaz_iconv_open(cp, "UTF-8"); if (cd) { + int r; search_req->query = yaz_copy_Z_Query(search_req->query, c->odr_out); - yaz_query_charset_convert_rpnquery(search_req->query->u.type_1, - c->odr_out, cd); + r = yaz_query_charset_convert_rpnquery_check( + search_req->query->u.type_1, + c->odr_out, cd); yaz_iconv_close(cd); + if (r) + { /* query could not be char converted */ + set_ZOOM_error(c, ZOOM_ERROR_INVALID_QUERY, 0); + return zoom_complete; + } } } } @@ -1971,6 +1978,9 @@ static const char *return_record(ZOOM_record rec, int *len, charset); if (ret_buf) return ret_buf; + /* bad ISO2709. Return fail unless raw (ISO2709) is wanted */ + if (marctype != YAZ_MARC_ISO2709) + return 0; } return return_string_record(rec, len, (const char *) r->u.octet_aligned->buf, @@ -4077,6 +4087,8 @@ static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres) Z_SRW_PDU *sr = (Z_SRW_PDU*) soap_package->u.generic->p; ZOOM_options_set(c->options, "sru_version", sr->srw_version); + ZOOM_options_setl(c->options, "sru_extra_response_data", + sr->extraResponseData_buf, sr->extraResponseData_len); if (sr->which == Z_SRW_searchRetrieve_response) cret = handle_srw_response(c, sr->u.response); else if (sr->which == Z_SRW_scan_response)