Commit 88e0a778 authored by Lev Walkin's avatar Lev Walkin

even more strict checking

parent 10dd97c7
...@@ -561,7 +561,7 @@ asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, long frac_value ...@@ -561,7 +561,7 @@ asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, long frac_value
*/ */
if(frac_base >= 10 if(frac_base >= 10
&& frac_value > 0 && 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 *end = p + 1 + 6; /* '.' + maximum 6 digits */
char *z = p; char *z = p;
...@@ -571,12 +571,15 @@ asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, long frac_value ...@@ -571,12 +571,15 @@ asn_time2GT_frac(GeneralizedTime_t *opt_gt, const struct tm *tm, long frac_value
int digit; int digit;
frac_base /= 10; frac_base /= 10;
digit = frac_value / frac_base; digit = frac_value / frac_base;
if(digit > 9) { z = 0; break; }
frac_value %= frac_base; frac_value %= frac_base;
*z++ = digit + 0x30; *z++ = digit + 0x30;
} while(frac_base >= 10 && frac_value > 0 && z < end); } while(frac_base >= 10 && frac_value > 0 && z < end);
for(--z; *z == 0x30; --z); /* Strip zeroes */ if(z && (frac_base == 1 || frac_base >= 10)) {
p = z + (*z != '.'); for(--z; *z == 0x30; --z); /* Strip zeroes */
size = p - buf; p = z + (*z != '.');
size = p - buf;
}
} }
if(force_gmt) { if(force_gmt) {
......
...@@ -126,6 +126,11 @@ check_fractions() { ...@@ -126,6 +126,11 @@ check_fractions() {
gt = asn_time2GT_frac(gt, &tm, 10, 20, 1); gt = asn_time2GT_frac(gt, &tm, 10, 20, 1);
assert(gt); assert(gt);
printf("[%s]\n", gt->buf); 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); assert(strcmp((char *)gt->buf, "19700101000000.5Z") == 0);
gt = asn_time2GT_frac(gt, &tm, -10, 20, 1); gt = asn_time2GT_frac(gt, &tm, -10, 20, 1);
...@@ -138,6 +143,11 @@ check_fractions() { ...@@ -138,6 +143,11 @@ check_fractions() {
printf("[%s]\n", gt->buf); printf("[%s]\n", gt->buf);
assert(strcmp((char *)gt->buf, "19700101000000Z") == 0); 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); gt = asn_time2GT_frac(gt, &tm, 90, 91, 1);
assert(gt); assert(gt);
printf("[%s]\n", gt->buf); printf("[%s]\n", gt->buf);
...@@ -146,7 +156,12 @@ check_fractions() { ...@@ -146,7 +156,12 @@ check_fractions() {
gt = asn_time2GT_frac(gt, &tm, 89, 91, 1); gt = asn_time2GT_frac(gt, &tm, 89, 91, 1);
assert(gt); assert(gt);
printf("[%s]\n", gt->buf); 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->buf);
FREEMEM(gt); FREEMEM(gt);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment