X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=util%2Fiso2709.c;h=7de97f265535cb091c631cfa2009e9393a3b56cf;hb=3f6af0f3aa9f114cf562c28f2ed0b954e4c5d659;hp=bfb691f17dc2c4a1df0b8b183737a0bc1a38385c;hpb=c225f9c0b0d280dedb06939fb68a1cb06c74a3c0;p=egate.git diff --git a/util/iso2709.c b/util/iso2709.c index bfb691f..7de97f2 100644 --- a/util/iso2709.c +++ b/util/iso2709.c @@ -3,12 +3,19 @@ Europagate, 1994-1995. - $Log: iso2709.c,v $ - Revision 1.3 1995/02/10 17:05:18 adam - New function iso2709_display to display MARC records in a - line-by-line format. The iso2709_cvt function no longer - prints the record to stderr. - + iso2709.c,v + * Revision 1.5 1995/02/22 15:24:14 adam + * Function iso2709_cvt makes a litte check for the format. It returns + * NULL if the buffer parameter can never be a MARC record. + * + * Revision 1.4 1995/02/15 17:45:44 adam + * Bug fix in iso2709 module. + * + * Revision 1.3 1995/02/10 17:05:18 adam + * New function iso2709_display to display MARC records in a + * line-by-line format. The iso2709_cvt function no longer + * prints the record to stderr. + * * Revision 1.2 1995/02/10 16:50:32 adam * Indicator field moved to 'struct iso2709_dir' from 'struct * iso2709_field'. @@ -97,6 +104,11 @@ Iso2709Rec iso2709_cvt (const char *buf) p->base_address = atoin (buf+12, 4); strncpyx (p->user_systems, buf+17, 3); + if (p->record_length < 26) + { + free (p); + return NULL; + } p->length_data_entry = atoin (buf+20, 1); p->length_starting = atoin (buf+21, 1); p->length_implementation = atoin (buf+22, 1); @@ -157,14 +169,15 @@ Iso2709Rec iso2709_cvt (const char *buf) (*fpp)->identifier = NULL; dpos_n = dpos; - while (buf[dpos_n] != ISO2709_FS && buf[dpos_n] != ISO2709_IDFS) + while (buf[dpos_n] != ISO2709_FS && buf[dpos_n] != ISO2709_IDFS && + buf[dpos_n] != ISO2709_RS) dpos_n++; (*fpp)->data = malloc (dpos_n - dpos + 1); strncpyx ((*fpp)->data, buf+dpos, dpos_n - dpos); dpos = dpos_n; - if (buf[dpos] == ISO2709_FS) + if (buf[dpos] == ISO2709_FS || buf[dpos] == ISO2709_RS) break; fpp = &(*fpp)->next;