What's fixed

What's fixed in OmniMark 10.1.0

What's fixed in the OmniMark 10.1.0 compiler

  • The warning emitted when a shelf was unused was unclear.
  • The compiler was incorrectly accepting an expression of type stream where one of type markup sink was expected. This is contrary to the specification, and is no longer allowed.
  • A signal to action inside a catch clause could cause incorrect code generation, possibly leading to an internal error at run-time.
  • A spurious warning could be emitted when using an alias to output an item of the specified attributes pseudo-shelf.
  • A specific ancestry selector was being accepted on the left-hand side of an element test. This is contrary to the specification, and allows for misleading programs. This is no longer permitted.
  • A spurious warning was output if the key of operator was the sole operation applied to a shelf that had been assigned a value.
  • An incorrect error message was output if with document-element appeared out of sequence in a do sgml-parse or do xml-parse action.
  • An incomplete error message was emitted when an invalid character class declaration was encountered.
  • A segfault was triggered at run time when calling a shelf-class function with a coroutine class argument.
  • New style indexers were being incorrectly rejected in function call arguments when the argument was shelf-class (e.g., read-only).
  • The OmniMark compiler would accept a dynamic function definition whose export status did not match a previous elsewhere definition of the same function.
  • A set of circular extended record declarations could incorrectly cause compiler error report.
  • OmniMark did not always detect at compile time and report the error that a record type requires infinite initialization depth.
  • An incomplete error message was emitted when a string set was left unclosed.
  • An internal error was triggered at compile-time when an instance of an opaque type occurred in a branch of the conditional operator, in a context where a string source or markup source was expected.
  • An internal error could be triggered at run-time if a string source function call with a shelf-class argument (e.g., read-only) was passed as a value string source argument to an outer function call, and the argument of the inner function call was an alias from do select or do select-type.
  • An internal error was triggered at compile-time if an overloaded function was defined on a required record type.
  • A dynamic function could be defined both with and without an overloaded qualifier. This is not well-defined, and is no longer allowed.
  • An internal error was triggered at compile-time if a value of type specified-attribute was compared to a value of type integer.
  • Compile-time error recovery has been improved when a type name was encountered in an unexpected context.
  • A segfault could occur if a run-time error occurred while accessing the attributes in the guard of a rule.
  • Using the same alias twice in the header of a repeat over loop could crash the compiler if one of the aliased shelves was a shelf literal.
  • Duplicate shelf names were being allowed in the header of a repeat over. This is contrary to the specification. This had been an error in versions of OmniMark previous to 10.0.0. The error has been re-instated.
  • An internal error could be triggered at compile-time if new was applied to an invalid value in the header of a using scope.
  • In some contexts, a shelf-class function call could lead to a segmentation fault at compile-time.
  • A repeat over of a shelf with a fixed-size of zero could lead to a cascade of incorrect compile-time errors.
  • OmniMark compiler was allowing #current-input in process rules, even though it was not attached and bound to fail at run-time.
  • In certain situations, a segmentation fault could occur at run-time when a shelf literal or shelf-class function appeared in a rule guard.
  • The compiler was incorrectly accepting an ELEMENT qualifier on DOCTYPE, in certain contexts. This is contrary to the specification, and is no longer accepted.
  • Attempting to apply a shelf test (e.g., is specified) to the result of a function call could trigger an internal error at compile-time.
  • An internal error could be triggered at compile-time if the is keyed test was applied to the attributes shelf.
  • A segfault occurred at compile-time if an syntactically-invalid indexer was used with attributes
  • A shelf-class function call was not being handled properly in the context of a stream test.
  • Casts to built-in types like markup-element-event inside a module that didn't import other modules would cause a compile-time internal error.

What's fixed in the OmniMark 10.1.0 runtime

  • Run-time error messages that refer to sink coroutines now correctly report their return type.
  • The sgml-in and sgml-out actions were erroneously affecting the validating XML parser as well.
  • A throw from an external-text-entity rule triggered by do markup-parse could lead to an invalid memory access.
  • If #current-dtd and #doctype are set to incompatible values, and the subsequent program error thrown by #content was caught, it was possible to trigger an internal error or incorrect behaviour.
  • A pattern function that ends without returning a value could trigger an internal error after the legitimate program error.
  • Capturing #current-markup-event on an element with a namespace-binding attribute was leaking memory.
  • Accessing attributes or specified attributes of an element created by create-element-event could trigger an internal error or a segmentation fault at run-time.
  • When reporting long file paths in error messages, OmniMark now inserts an ellipsis to better indicate that the file path is truncated. It also removes the middle of the overlong file path instead of its end, which is more informative.
  • An internal error could result if the target coroutine of signal throw performed a throw back to the original coroutine through intermediates.
  • A long processing instruction text could cause a segmentation fault when consumed through #content.
  • A throw from a markup rule triggered by do markup-parse #current-input inside a markup sink function could cause a memory leak or a segmentation fault.
  • Applying do markup-parse to a markup source containing external text entity references in some circumstances could lead to a segmentation fault.
  • Consumption of #content would lead to a segmentation fault if it included the end of an external text entity, but not its beginning.
  • The repeat over attributes action could segfault on an element that has both declared but unspecified, and undeclared but specified attributes.
  • An element event with an empty element name, created using create-element-event and create-element-declaration, could cause a segmentation fault when processed by do markup-parse.
  • Entity-matching translate rules could cause memory corruption and segmentation faults on large data content blocks.
  • The indexing mode was not being preserved when the attributes shelf was passed to a function as a read-only argument.
  • Consuming #content twice inside a do markup-parse scope lead to a segmentation fault.
  • An element event returned by create-element-event did not have xmlns-name assigned even if its attributes specified one.
  • Multiple occurrences of the same attribute name in an ATTLIST were reported as markup errors both in SGML and XML. The behaviour of the validating XML parser has been changed to a markup warning, in conformance with the XML specification, and only the first attribute declaration is kept.
  • An empty ATTLIST declaration was reported as a markup error in validating XML parser, even though the XML specification allows it.
  • The well-formed XML parser used to issue markup errors on characters like backspace, which are discouraged but allowed by the XML specification. This error has been replaced by a markup warning.
  • A malformed XML processing instruction could cause an internal error in OmniMark's well-formed XML parser, abruptly terminating the current parse.
  • Applying do markup-parse to a markup source function with an argument that was another string source function followed by drop could cause an internal error.
  • An external-text-entity #document rule could in some rare circumstances cause a segmentation fault in the interpreter during the loading time.
  • Library file path command-line parameters starting with a // or /./ character sequence could trigger a memory corruption or segmentation fault.

What's fixed in the OmniMark 10.1.0 libraries

  • The execute function in the omprocess library would not always allow the invoked process to consume all of its standard input, when used on Windows platforms.
  • Function uri.canonical was properly working only on local URIs, with no server.
  • Function uri.canonical was stripping the double-slash sequence into a single slash even before the path segments. The result was an incorrect URI.
  • Function uri.canonical was normalizing the fragment portion of the URI. The function now conforms to the standard and leaves the fragment unmodified.
  • The omxerces library could cause a segmentation fault if given an XML schema with a large maxOccurs integer attribute value.
  • The omxerces library was not firing the external-text-entity rules for entities whose system identifier was an empty string.
  • The omxerces library could cause a segmentation fault when applied to a malformed XML with a schema declaration.

What's fixed in the OmniMark 10.1.0 Studio for Eclipse

  • OmniMark Studio now shows more detailed information about markup event values.

What's fixed in OmniMark 10.0.0

What's fixed in the OmniMark 10.0.0 compiler

  • A warning is now emitted if a domain-bound global is never saved.
  • In some circumstances, the line number information given for a compile-time error that followed the export keyword was incorrect.
  • The types of the branches of the conditional operator were not being unified if the closest common supertype was not exported from the module exporting the child types.
  • The types of #current-input and #current-output were not being tracked properly, allowing invalid programs to compile. This is contrary to the specification, and has been fixed.
  • A record type could not be elsewhered after it had been fully declared.
  • Using key of on a single-item unkeyed record field could lead to a segmentation fault at run-time.
  • In some circumstances, the compiler rejected a built-in stream in the header of using output as.
  • The value-start and value-end positional patterns were not allowed in processing-instruction rule headers.
  • Certain record type hierarchies could cause live record instances to be garbage-collected.
  • An incorrect error message was emitted by the compiler if with current sgml-dtd was used with subdocument in do sgml-parse.
  • An internal error was triggered at compile-time if a pretentious module referred to a predefined shelf.
  • The compiler accepted multiple occurrences of the keyword new where only one is allowed.
  • The compiler accepted an optional argument in the first position for a dynamic or overriding function. This is not well-defined and is now rejected.
  • The compiler allowed a constant item indexer on a shelf literal to exceed the size of the shelf literal.
  • The compiler accepted invalid type variances on the return types and arguments of dynamic and overriding functions. This is contrary to the specification, and is no longer allowed.
  • The error message emitted when attempting to save a shelf literal was misleading.
  • The error message emitted when applying save to a built-in shelf was incorrect.
  • An internal error was triggered at compile-time if a function imported from a module conflicted with a require.
  • The successful compilation of a call to an overloaded function in a pattern context could depend on the order of the definitions of the overloadings.
  • The compiler would accept copy from a fixed-size shelf to a variable-size shelf, even when the former was larger than the latter. This cannot succeed at run-time and must be disallowed.
  • Two-token keywords ending in of, as for example length of, were being rejected if they appeared as a function argument and the following function argument was heralded by the second token of the two-token keyword.
  • The parent type in a record declaration could differ from that given in the elsewhere declaration. This is contrary to the specification and is no longer allowed.
  • using input as "%c" was not always tracking the use of %c, which could lead to correct programs not compiling.
  • An overloaded switch function with a non-parenthesized argument list was not being accepted when compiling patterns for take, drop, and matches.
  • The error messages on the uses of the previous is test in various disallowed contexts were always reporting the content keyword as being disallowed.

What's fixed in the OmniMark 10.0.0 runtime

  • Existence of markup-comment and marked-section rules could affect the boundaries of translate rules' pattern matching across the module boundaries. This is now restricted only to the rules within the same module.
  • The remove action could fail when applied to a shelf item created by using new inside the scope.
  • The content-start and content-end patterns in translate rules were not firing only at the beginning and end of element content, as they were supposed to.
  • Interrupting consumption of #content of an element with an XML namespace change could trigger an internal error.
  • The validating XML parser was not treating numeric character entities entered in hexadecimal as it was treating numeric character entities entered decimal. These two should be treated equivalently.
  • A guarded new could fail when the maximum shelf size was reached, even when no new item was being added to the shelf.
  • Dynamic element name tests could fail when applied to element events created by do markup-parse.
  • A markup event explicitly signalled from a pattern function through an intermediate coroutine and to a markup parser could be parsed before preceding data content.
  • In certain circumstances, a markup error could mislead OmniMark into thinking a stream was opened, when in fact it was closed.
  • The name of an SGML external entity captured by #content was sometimes incorrectly reported as a part of the SGML declaration.
  • The -FTRACE command-line option could cause incorrect program behaviour in functions called from a markup-error rule.
  • Catching a throw from an external-text-entity rule and then continuing to feed the parser could cause a segmentation fault.
  • A do markup-parse command applied to a join of xerces.xml external parser and another markup source could cause a segmentation fault at run-time.
  • Consumption of a markup source after catching a throw could erroneously lead to a markup event being thrown in a wrong coroutine.
  • The previous is test always failed on the top-level element, and its occurrence was always one.
  • The dynamic element name tests could fail on element events that were not generated by a the currently active parse.
  • The previous is test could return random results inside a do markup-parse consuming events from parses that were not active any more.
  • A throw from an external string source function was not being propagated if the function was called in the setup of a pattern matching environment.

What's fixed in the OmniMark 10.0.0 libraries

  • The function uri.parse did not accept a URI that contained nothing but the URI fragment.
  • If a markup-buffer was written to through multiple sinks, the order of the written string data was determined by the order in which the sinks were closed. This could lead to unexpected results, so this has been changed so that the data order depends on the order in which the sinks are open.
  • Compiling a RELAX NG schema with the RELAX NG collection elements in a namespace other than the default one caused an internal error.
  • The omxmlwrite library was producing well-formed XML even when its input markup stream was malformed.
  • Certain circular references in a schema could cause an internal error in relaxng.compile-schema.

What's fixed in the OmniMark 10.0.0 grammar

  • The grammar production for a user-defined name character referred to the deprecated letters declaration.
  • The production for a name referred to data characters.
  • field references had been omitted from the grammar.