diff options
author | Adam Dickmeiss <dickmeiss@php.net> | 2003-05-13 10:31:46 +0000 |
---|---|---|
committer | Adam Dickmeiss <dickmeiss@php.net> | 2003-05-13 10:31:46 +0000 |
commit | 46dbbff7f039bd1e292f96bbd8b71ad9f6df2d6d (patch) | |
tree | 4d91f975ea9cc5d62d4b965dccd8284e3c1b4be1 | |
parent | e4ee44f8ab6f805a5c2793f97360a6aba8e61989 (diff) | |
download | php-git-46dbbff7f039bd1e292f96bbd8b71ad9f6df2d6d.tar.gz |
Fix problem with yaz_record in array mode, when record is unavailable.
-rw-r--r-- | ext/yaz/php_yaz.c | 30 |
1 files 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; |