even more strict checking

diff --git a/skeletons/GeneralizedTime.c b/skeletons/GeneralizedTime.c
index 4e60f6a..5107040 100644
--- a/skeletons/GeneralizedTime.c
+++ b/skeletons/GeneralizedTime.c
@@ -561,7 +561,7 @@
 	 */
 	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 @@
 			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 7a805b0..4b9f266 100644
--- a/skeletons/tests/check-GeneralizedTime.c
+++ b/skeletons/tests/check-GeneralizedTime.c
@@ -126,6 +126,11 @@
 	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 @@
 	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 @@
 	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);