diff options
author | Lev Walkin <vlm@lionet.info> | 2005-07-04 02:29:36 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2005-07-04 02:29:36 +0000 |
commit | 88e0a778c9bb8310896ad837d67dd076bce82d5b (patch) | |
tree | 81026c1ae376bafaef0773502729d18371006694 /skeletons | |
parent | 10dd97c70c40f76b6f269ff4d4c9aab89816c2db (diff) |
even more strict checking
Diffstat (limited to 'skeletons')
-rw-r--r-- | skeletons/GeneralizedTime.c | 11 | ||||
-rw-r--r-- | skeletons/tests/check-GeneralizedTime.c | 17 |
2 files changed, 23 insertions, 5 deletions
diff --git a/skeletons/GeneralizedTime.c b/skeletons/GeneralizedTime.c index 4e60f6a2..51070406 100644 --- a/skeletons/GeneralizedTime.c +++ b/skeletons/GeneralizedTime.c @@ -561,7 +561,7 @@ asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, long frac_value */ if(frac_base >= 10 && frac_value > 0 - && (frac_value/(frac_base/10)) < 10 /* 98/99 */ + && (frac_value/frac_base) == 0 ) { char *end = p + 1 + 6; /* '.' + maximum 6 digits */ char *z = p; @@ -571,12 +571,15 @@ asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, long frac_value int digit; frac_base /= 10; digit = frac_value / frac_base; + if(digit > 9) { z = 0; break; } frac_value %= frac_base; *z++ = digit + 0x30; } while(frac_base >= 10 && frac_value > 0 && z < end); - for(--z; *z == 0x30; --z); /* Strip zeroes */ - p = z + (*z != '.'); - size = p - buf; + if(z && (frac_base == 1 || frac_base >= 10)) { + for(--z; *z == 0x30; --z); /* Strip zeroes */ + p = z + (*z != '.'); + size = p - buf; + } } if(force_gmt) { diff --git a/skeletons/tests/check-GeneralizedTime.c b/skeletons/tests/check-GeneralizedTime.c index 7a805b07..4b9f2661 100644 --- a/skeletons/tests/check-GeneralizedTime.c +++ b/skeletons/tests/check-GeneralizedTime.c @@ -126,6 +126,11 @@ check_fractions() { gt = asn_time2GT_frac(gt, &tm, 10, 20, 1); assert(gt); printf("[%s]\n", gt->buf); + assert(strcmp((char *)gt->buf, "19700101000000Z") == 0); + + gt = asn_time2GT_frac(gt, &tm, 10000000, 20000000, 1); + assert(gt); + printf("[%s]\n", gt->buf); assert(strcmp((char *)gt->buf, "19700101000000.5Z") == 0); gt = asn_time2GT_frac(gt, &tm, -10, 20, 1); @@ -138,6 +143,11 @@ check_fractions() { printf("[%s]\n", gt->buf); assert(strcmp((char *)gt->buf, "19700101000000Z") == 0); + gt = asn_time2GT_frac(gt, &tm, 988, 999, 1); + assert(gt); + printf("[%s]\n", gt->buf); + assert(strcmp((char *)gt->buf, "19700101000000Z") == 0); + gt = asn_time2GT_frac(gt, &tm, 90, 91, 1); assert(gt); printf("[%s]\n", gt->buf); @@ -146,7 +156,12 @@ check_fractions() { gt = asn_time2GT_frac(gt, &tm, 89, 91, 1); assert(gt); printf("[%s]\n", gt->buf); - assert(strcmp((char *)gt->buf, "19700101000000.9Z") == 0); + assert(strcmp((char *)gt->buf, "19700101000000Z") == 0); + + gt = asn_time2GT_frac(gt, &tm, 89000000, 91000000, 1); + assert(gt); + printf("[%s]\n", gt->buf); + assert(strcmp((char *)gt->buf, "19700101000000.978021Z") == 0); FREEMEM(gt->buf); FREEMEM(gt); |