What's fixed

What's fixed in OmniMark 10.1.2

What's fixed in the OmniMark 10.1.2 compiler

  • An internal error was triggered at run-time if a program contained an elsewhere definition of an overriding function, without providing an implementation of the function. This is contrary to the specification. A compile-time error is now triggered.
  • A space at the beginning of the description field of a licence key request would cause a segmentation fault. This could prevent users from requesting their authorization key.
  • The -gc-threshold command-line argument was limited to 32-bit values. This is inappropriate on 64-bit platforms.
  • Authorization could be very slow on Windows platforms.
  • Using a newline character in an insertion-break declaration would lead to an illegible error message.
  • The deprecated = form of the pattern capture operator was being given precedence in expression contexts such as drop and take. This prevented correct programs from compiling.
  • An internal error was triggered at compile-time if a parenthesized expression was used where a shelf reference was required.
  • The warning reported when deprecated indexer syntax was encountered recommended replacing it with different, equally-deprecated syntax.
  • The specified attributes shelf was not allowed in a process rule even when applied to an element event.
  • A warning is now emitted if output is used at the top-level of a  markup sink function, since this can fail at run-time.
  • An internal error was triggered at compile-time if a shelf-class function was incorrectly defined without a return type.
  • An internal error was triggered at compile-time if a pattern variable and a shelf of the same name appeared in the same pattern.
  • A do markup-parse block nested inside either a do sgml-parse or do xml-parse would corrupt the type of #current-dtd.
  • The compiler would incorrectly reject a module that exported an overloaded dynamic function on one type, without also exporting any other overloaded dynamic functions on other unrelated types.
  • Cascading comparisons did not evaluate correctly if one of the comparisons was != and the type of the arguments was string or stream. This could cause programs to behave incorrectly.
  • An internal error could be triggered at compile-time when returning an expression from a shelf-class function.
  • An internal error was triggered at compile-time if the name of operator was applied to the current elements pseudo-shelf.
  • The compiler incorrectly insisted that a shelf literal on the right-hand side of copy or copy-clear had to have its type disambiguated. The type context of the right-hand side of copy or copy-clear is now determined by the left-hand side of the action.
  • An internal error was triggered at compile-time if the is specified test was applied to the attributes shelf reference.
  • The compiler incorrectly accepted a parenthesized function definition with a single optional argument. This is contrary to the specification and is now disallowed.
  • An internal error was triggered at compile-time if an element set was used in the doctype is test.
  • An internal error was triggered by the compiler if has key was applied to an element qualifier in an element test. This is now a syntax error.

What's fixed in the OmniMark 10.1.2 runtime

  • An uncaught program error in a sink coroutine could result in an internal error.
  • The OmniMark garbage collector could cause a segmentation fault after a re-allocation of a large block of memory.
  • Use of #content does not trigger the Attempting to process content twice in one rule error even if it consumes the entire rest of the content.
  • An OmniMark program with heavy memory use and using throws through a scope with save declarations could, on rare occasions, produce corrupted outputs.
  • Large attribute values provided incrementally could lead to an inordinate amount of memory being allocated.
  • Preserving a reference to an attribute of an unreachable markup-element-event could cause an internal error or memory corruption.
  • The output #content action could be used after output %c with no error. This is now flagged as a run-time error.
  • A markup error inside a comment would end the comment and cause the remainder of the comment text to spill after the comment.
  • Referencing the #content source twice in the same markup rule could cause a segmentation fault during the execution.
  • Cloning with create-element-declaration an element declaration produced by parsing a DTD could lead to a segmentation fault at run-time.
  • The -gc-keep-memory command-line option could cause a segmentation fault at the end of program execution.
  • The validating XML parser would reject an element declaration when the content model was expressed using a parameter entity, and the parameter entity did not consist of at least one token, or started or ended with a connector. Although this is not an error in XML, its use is discouraged. A warning is now emitted instead of an error.
  • There was a typo in the markup error emitted when duplicate token values appeared in an attribute declaration.

What's fixed in the OmniMark 10.1.2 libraries

  • A segmentation fault could be triggered in the OMFTP library when connecting to certain FTP servers.
  • The OMHTTP library was not using the correct syntax for the accept header in HTTP requests.
  • The ommail function MailInBoxGetMessage was occasionally ignoring the lines of the message body that started with the '+' character.
  • The fork operator & can now be applied to two markup-buffer values.
  • The omrelaxng library refused to compile a valid RELAX NG schema using a combine attribute on a start node only in the including schema.

What's fixed in OmniMark 10.1.1

What's fixed in the OmniMark 10.1.1 compiler

  • The l and u modifiers were being rejected on %eq. This was contrary to the specification.
  • If an undeclared identifier was supplied to a module in an import declaration, a non-sensical error message was emitted.
  • An internal error could be triggered if a value argument was passed as a shelf-class argument to a shelf-class function, and the result of the function was used in a repeat over.
  • Error recovery has been improved when a do select-type is missing the required alias.
  • An internal error was triggered at compile-time if an invalid new expression of type markup sink appeared as an argument of a string sink or markup sink function.
  • The attribute alias in a repeat over attributes or repeat over specified attributes loop was being converted to a string value and back upon assignment to a shelf. This lead to the loss of the attribute's declaration in the target shelf.
  • An incorrect error message was being emitted at compile-time if the optional argument initializers did not agree between a dynamic function and one of its overriding functions. The correct error message is now emitted
  • A conditional operator containing ancestry expressions in its alternatives would trigger an internal error at compile-time.
  • An internal error could be triggered at compile-time if content was used on the left-hand side of a set, in a context where no shelf called content was previously-declared.
  • An overloading of name of could not be declared dynamic.
  • An internal error could be triggered if a syntax error occurred in the guard of a rule
  • An overloaded infix-function with either argument declared to have type markup-element-event could not be invoked using an element expression in that position.
  • An internal error was triggered at compile-time if a shelf-class function call was used as the dispatch argument of a dynamic function.
  • An internal error could be triggered at compile-time when parsing a syntactically-invalid element test
  • An internal error was triggered at compile-time if a cast appeared in the head of a do select-type.
  • A segmentation fault would occur at compile-time when attempting to apply new to an optional value function argument, inside an is specified test.
  • Constant propagation was incorrectly being applied to the alias in a repeat over loop. This would lead to incorrect results at run-time.
  • The compiler would lose track of %c or #content if it happened to be used as the argument of an overloaded function call. This could cause correct programs to fail to compile.
  • An internal error could be triggered at compile-time if content appeared in a process rule, in certain contexts.
  • An internal error could be triggered at compile-time when a markup source function's signature did not match its declaration.
  • An internal error was triggered at compile-time when a stream field of a record instance was used in a branch of a conditional operator, in the head of a using output as scope.

What's fixed in the OmniMark 10.1.1 runtime

  • After a throw from a markup source function used by do markup-parse, the scope within do markup-parse terminated without a proper cleanup. This could lead to resource leaks, internal errors, or segfaults.
  • Passing create-element-event an attribute shelf item with an empty string for a key would cause a segmentation fault at run-time.
  • Expressions beginning with attributes of create-element-event could lead to a segmentation fault at run-time.
  • Invoking create-unspecified-attribute multiple times could lead to an infinite loop.
  • The result of declaration of attributes of create-element-event was not always correctly initialized. This could lead to a run-time error or segmentation fault.
  • Returning a keyed shelf item from a shelf-returning function would remove the item's key.
  • A second attempt to consume the same #content after the first was interrupted could drop some data content.
  • Casting the result of create-specified-attribute to a specified-attribute and then accessing its value could cause an internal error at run-time.
  • Invoking a pattern function with a do scan action from a markup-error rule could cause an internal error at run-time.
  • If a value-returning function made a call from within an always clause to a coroutine function which called another function returning the same type of value, a program error could be issued even though there was no error.
  • Passing a join to a function that pattern matches ahead on the source could leave the source in an inconsistent state, potentially leading to corrupt output or a segmentation fault.
  • Using create-element-event only to fetch an attribute of the result could cause a segmentation fault.
  • If #content was only partially consumed, the remaining unpaired #markup-end events would appear in reverse order.
  • Failing to close a stream attached to a referent by the end of the nested-referents scope the referent was bound to could lead to a segmentation fault at run-time.
  • An external text entity event generated by a parse that was emitting only #content, and then getting processed by a do markup-parse in a different markup sink coroutine, could cause an internal error and segmentation fault.

What's fixed in the OmniMark 10.1.1 libraries

  • The OMFTP library would fail when attempting to perform data transfers (for example, uploading files) if the host was a recent Linux distribution.
  • When trasferring files to or from certain FTP servers using FTPConnectionRemoteOutputFile or FTPConnectionRemoteInputFile, the operations could fail with error OMFTP002.
  • The netutil.host-ip function in the omnetutil library would return a useless value when querying for the address of the local host.

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.