From 46dbbff7f039bd1e292f96bbd8b71ad9f6df2d6d Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 13 May 2003 10:31:46 +0000 Subject: [PATCH] Fix problem with yaz_record in array mode, when record is unavailable. --- ext/yaz/php_yaz.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/ext/yaz/php_yaz.c b/ext/yaz/php_yaz.c index a6f1fd5102..99fd814f1a 100644 --- a/ext/yaz/php_yaz.c +++ b/ext/yaz/php_yaz.c @@ -939,16 +939,17 @@ PHP_FUNCTION(yaz_record) if (r) { if (!strcmp(type, "array")) { Z_External *ext = (Z_External *) ZOOM_record_get(r, "ext", 0); - oident *ent = oid_getentbyoid(ext->direct_reference); - - if (ext->which == Z_External_grs1 && ent->value == VAL_GRS1) { - retval_grs1(return_value, ext->u.grs1); - } else if (ext->which == Z_External_octet) { - char *buf = (char *) (ext->u.octet_aligned->buf); - ODR odr = odr_createmem(ODR_DECODE); - Z_GenericRecord *rec = 0; - - switch (ent->value) { + if (ext) { + oident *ent = oid_getentbyoid(ext->direct_reference); + + if (ext->which == Z_External_grs1 && ent->value == VAL_GRS1) { + retval_grs1(return_value, ext->u.grs1); + } else if (ext->which == Z_External_octet) { + char *buf = (char *) (ext->u.octet_aligned->buf); + ODR odr = odr_createmem(ODR_DECODE); + Z_GenericRecord *rec = 0; + + switch (ent->value) { case VAL_SOIF: case VAL_HTML: break; @@ -958,11 +959,12 @@ PHP_FUNCTION(yaz_record) break; default: rec = marc_to_grs1(buf, odr); + } + if (rec) { + retval_grs1(return_value, rec); + } + odr_destroy(odr); } - if (rec) { - retval_grs1(return_value, rec); - } - odr_destroy(odr); } } else { int rlen; -- 2.50.1