diff --git a/shared/src/main/scala/io/kaitai/struct/format/AttrSpec.scala b/shared/src/main/scala/io/kaitai/struct/format/AttrSpec.scala index 09e1b941f..fcccc12fc 100644 --- a/shared/src/main/scala/io/kaitai/struct/format/AttrSpec.scala +++ b/shared/src/main/scala/io/kaitai/struct/format/AttrSpec.scala @@ -179,11 +179,11 @@ object AttrSpec { val sizeEos = ParseUtils.getOptValueBool(srcMap, "size-eos", path).getOrElse(false) val ifExpr = ParseUtils.getOptValueExpression(srcMap, "if", path) val encoding = ParseUtils.getOptValueStr(srcMap, "encoding", path) - val terminator = ParseUtils.getOptValueInt(srcMap, "terminator", path) + val terminator = ParseUtils.getOptValueByte(srcMap, "terminator", path) val consume = ParseUtils.getOptValueBool(srcMap, "consume", path).getOrElse(true) val include = ParseUtils.getOptValueBool(srcMap, "include", path).getOrElse(false) val eosError = ParseUtils.getOptValueBool(srcMap, "eos-error", path).getOrElse(true) - val padRight = ParseUtils.getOptValueInt(srcMap, "pad-right", path) + val padRight = ParseUtils.getOptValueByte(srcMap, "pad-right", path) val enumOpt = ParseUtils.getOptValueStr(srcMap, "enum", path) val parent = ParseUtils.getOptValueExpression(srcMap, "parent", path) val valid = srcMap.get("valid").map(ValidationSpec.fromYaml(_, path ++ List("valid"))) diff --git a/shared/src/main/scala/io/kaitai/struct/format/ParseUtils.scala b/shared/src/main/scala/io/kaitai/struct/format/ParseUtils.scala index 97652f03d..1481cddcb 100644 --- a/shared/src/main/scala/io/kaitai/struct/format/ParseUtils.scala +++ b/shared/src/main/scala/io/kaitai/struct/format/ParseUtils.scala @@ -72,6 +72,15 @@ object ParseUtils { } } + def getOptValueByte(src: Map[String, Any], field: String, path: List[String]): Option[Int] = { + getOptValueInt(src, field, path).map { value => + if (value < 0 || value > 255) { + throw KSYParseError.withText(s"expected an integer from 0 to 255, got ${value}", path ++ List(field)) + } + value + } + } + def getValueIdentifier(src: Map[String, Any], idx: Int, entityName: String, path: List[String]): Identifier = { getOptValueStr(src, "id", path) match { case Some(idStr) =>