schema compile BUGFIX checking decimal64 values

number of fraction digits were checked even if there were no fraction
digits in the value.
diff --git a/src/plugins_types.c b/src/plugins_types.c
index 0f08a1b..f069140 100644
--- a/src/plugins_types.c
+++ b/src/plugins_types.c
@@ -137,7 +137,7 @@
     len = len - trailing_zeros;
 
 decimal:
-    if (len - 1 - fraction > fraction_digits) {
+    if (fraction && (len - 1 - fraction > fraction_digits)) {
         asprintf(&errmsg, "Value \"%.*s\" of decimal64 type exceeds defined number (%u) of fraction digits.", (int)len, value,
                  fraction_digits);
         goto error;
diff --git a/src/tree_schema_compile.c b/src/tree_schema_compile.c
index 623dd26..37932a7 100644
--- a/src/tree_schema_compile.c
+++ b/src/tree_schema_compile.c
@@ -1139,7 +1139,7 @@
     if (basetype == LY_TYPE_DEC64) {
 decimal:
         assert(frdigits);
-        if (*len - 1 - fraction > frdigits) {
+        if (fraction && (*len - 1 - fraction > frdigits)) {
             LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_SYNTAX_YANG,
                    "Range boundary \"%.*s\" of decimal64 type exceeds defined number (%u) of fraction digits.",
                    *len, value, frdigits);
diff --git a/tests/src/test_tree_schema_compile.c b/tests/src/test_tree_schema_compile.c
index f03d2d3..bd00a7e 100644
--- a/tests/src/test_tree_schema_compile.c
+++ b/tests/src/test_tree_schema_compile.c
@@ -1580,6 +1580,17 @@
     assert_int_equal(1000, ((struct lysc_type_dec*)type)->range->parts[2].min_64);
     assert_int_equal(1000, ((struct lysc_type_dec*)type)->range->parts[2].max_64);
 
+    assert_non_null(mod = lys_parse_mem(ctx, "module c {namespace urn:c;prefix c;typedef mytype {type decimal64 {"
+                                        "fraction-digits 2;range '1 .. 65535';}}leaf l {type mytype;}}", LYS_IN_YANG));
+    type = ((struct lysc_node_leaf*)mod->compiled->data)->type;
+    assert_int_equal(LY_TYPE_DEC64, type->basetype);
+    assert_int_equal(2, ((struct lysc_type_dec*)type)->fraction_digits);
+    assert_non_null(((struct lysc_type_dec*)type)->range);
+    assert_non_null(((struct lysc_type_dec*)type)->range->parts);
+    assert_int_equal(1, LY_ARRAY_SIZE(((struct lysc_type_dec*)type)->range->parts));
+    assert_int_equal(100, ((struct lysc_type_dec*)type)->range->parts[0].min_64);
+    assert_int_equal(6553500, ((struct lysc_type_dec*)type)->range->parts[0].max_64);
+
     /* invalid cases */
     assert_null(lys_parse_mem(ctx, "module aa {namespace urn:aa;prefix aa; leaf l {type decimal64 {fraction-digits 0;}}}", LYS_IN_YANG));
     logbuf_assert("Invalid value \"0\" of \"fraction-digits\". Line number 1.");
@@ -1610,6 +1621,13 @@
                                         "typedef mytype2 {type mytype {fraction-digits 3;}}leaf l {type mytype2;}}", LYS_IN_YANG));
     logbuf_assert("Invalid fraction-digits substatement for type \"mytype2\" not directly derived from decimal64 built-in type. /de:l");
 
+    assert_null(lys_parse_mem(ctx, "module ee {namespace urn:c;prefix c;typedef mytype {type decimal64 {"
+                              "fraction-digits 18;range '-10 .. 0';}}leaf l {type mytype;}}", LYS_IN_YANG));
+    logbuf_assert("Invalid range restriction - invalid value \"-10000000000000000000\". /ee:l");
+    assert_null(lys_parse_mem(ctx, "module ee {namespace urn:c;prefix c;typedef mytype {type decimal64 {"
+                              "fraction-digits 18;range '0 .. 10';}}leaf l {type mytype;}}", LYS_IN_YANG));
+    logbuf_assert("Invalid range restriction - invalid value \"10000000000000000000\". /ee:l");
+
     *state = NULL;
     ly_ctx_destroy(ctx, NULL);
 }