diff --git a/src/std/rec/lsiRecord.c b/src/std/rec/lsiRecord.c index 1cbff9185..ee9e8e2f0 100644 --- a/src/std/rec/lsiRecord.c +++ b/src/std/rec/lsiRecord.c @@ -158,9 +158,10 @@ static long put_array_info(DBADDR *paddr, long nNew) { lsiRecord *prec = (lsiRecord *) paddr->precord; - if (nNew == prec->sizv) - --nNew; /* truncated string */ - prec->val[nNew] = 0; /* ensure data is terminated */ + if (nNew >= prec->sizv) + nNew = prec->sizv - 1; /* truncated string */ + if (paddr->field_type == DBF_CHAR) + prec->val[nNew] = 0; /* ensure data is terminated */ return 0; } diff --git a/src/std/rec/lsoRecord.c b/src/std/rec/lsoRecord.c index 271a0c3f9..52a6f1aa4 100644 --- a/src/std/rec/lsoRecord.c +++ b/src/std/rec/lsoRecord.c @@ -200,9 +200,10 @@ static long put_array_info(DBADDR *paddr, long nNew) { lsoRecord *prec = (lsoRecord *) paddr->precord; - if (nNew == prec->sizv) - --nNew; /* truncated string */ - prec->val[nNew] = 0; /* ensure data is terminated */ + if (nNew >= prec->sizv) + nNew = prec->sizv - 1; /* truncated string */ + if (paddr->field_type == DBF_CHAR) + prec->val[nNew] = 0; /* ensure data is terminated */ return 0; }