X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=data1%2Fd1_expout.c;h=ce0a5e3ba889be1d621fe192994b376343ac35ae;hp=b7404446a8479da1f52fbe4c84d87b4631593270;hb=5a54cb4d2b46949fceead27d0edb1a44df2d7da2;hpb=591ac4cbcd27587be8ba333f64c82f3bbba2b7ea diff --git a/data1/d1_expout.c b/data1/d1_expout.c index b740444..ce0a5e3 100644 --- a/data1/d1_expout.c +++ b/data1/d1_expout.c @@ -68,18 +68,15 @@ static int is_data_tag (ExpHandle *eh, data1_node *c) return 1; } -static int *f_integer(ExpHandle *eh, data1_node *c) +static Odr_int *f_integer(ExpHandle *eh, data1_node *c) { - int *r; char intbuf[64]; c = c->child; - if (!is_data_tag (eh, c) || c->u.data.len > 63) + if (!is_data_tag (eh, c) || c->u.data.len >= sizeof(intbuf)) return 0; - r = (int *)odr_malloc(eh->o, sizeof(*r)); sprintf(intbuf, "%.*s", c->u.data.len, c->u.data.data); - *r = atoi(intbuf); - return r; + return odr_intdup(eh->o, atoi(intbuf)); } static char *f_string(ExpHandle *eh, data1_node *c) @@ -251,7 +248,7 @@ Z_RpnCapabilities *f_rpnCapabilities (ExpHandle *eh, data1_node *n) (res->num_operators)++; } if (res->num_operators) - res->operators = (int **) + res->operators = (Odr_int **) odr_malloc (eh->o, res->num_operators * sizeof(*res->operators)); for (n = c->child; n; n = n->next) @@ -388,9 +385,8 @@ static Z_AccessInfo *f_accessInfo(ExpHandle *eh, data1_node *n) return res; } -static int *f_recordCount(ExpHandle *eh, data1_node *c, int *which) +static Odr_int *f_recordCount(ExpHandle *eh, data1_node *c, int *which) { - int *r= (int *)odr_malloc(eh->o, sizeof(*r)); int *wp = which; char intbuf[64]; @@ -403,11 +399,11 @@ static int *f_recordCount(ExpHandle *eh, data1_node *c, int *which) *wp = Z_DatabaseInfo_approxNumber; else return 0; - if (!c->child || c->child->which != DATA1N_data) + if (!c->child || c->child->which != DATA1N_data || + c->child->u.data.len >= sizeof(intbuf)) return 0; sprintf(intbuf, "%.*s", c->child->u.data.len, c->child->u.data.data); - *r = atoi(intbuf); - return r; + return odr_intdup(eh->o, atoi(intbuf)); } static Z_ContactInfo *f_contactInfo(ExpHandle *eh, data1_node *n)