swirl Guide to OmniMark 5   OmniMark home
docs home 
IndexConceptsTasksSyntaxLibrariesOMX VariablesErrors
 
     
What was fixed

This is a list of errors that were fixed in previous versions of OmniMark.

OmniMark 5.3

catch now works in processing-instruction rules.

Trying to output a catch now triggers an error message, not a segmentation fault.

When using the haltstatement, the return value generated by the presence of markup errors was taking precedence over the programmer-defined return value. The halt value now always takes precedence over markup errors.

OmniMark 5.2

The following errors are corrected in OmniMark 5.2:

You can now flush streams in Windows.

Including duplicate entity definitions after multiple doctypes no longer triggers an internal error.

An extra carriage return is no longer emitted to standard out/standard error in Windows.

Throwing from sgml-parse no longer triggers an internal error.

The construct ul (pattern => var)+ no longer triggers an internal error.

#sgml-error-total and #markup-error-total are no longer reset to 0 in document-end rules.

When #current-input is not yet attached, the code output #current-input now gives a run-time error message instead of a segmentation fault.

rethrow #program-error now works.

When no element rule can fire for an element name and no element #implied rule is used, a run-time error message is given instead of a segmentation fault.

Compiling DTDs works properly again.

Attempting the is attached test on a remainder shelf no longer gives an internal error.

In Linux, OmniMark no longer gives a segmentation fault when it finds a syntax error of the form when parent is (x or ).

Opaque remainder shelves with exactly two items no longer trigger an internal error.

Trying to call an external output function that takes a remainder argument no longer triggers an internal error.

When a stream is reopened with referents-allowed, length of now returns the correct value, not twice the correct value.

Using nested saves no longer triggers an internal error.

A syntax error in a copy action no longer triggers an internal error.

Extra output no longer occurs in an up-translation of xml-parse/sgml-parse.

Dynamically converting from a string to a number now allows a leading "+" in the string.

The pattern ul [char-set] now ignores case.

System identifiers in external entities and doctypes may be the empty string. In previous versions, this triggered an internal error.

OmniMark now gives a run-time error instead of a segmentation fault if the program tries to compile a DTD to a shelf with the key currently in use.

OmniMark no longer gives a segmentation fault when trying to use a nonexistent DTD key.

using group <group-name> and #implied now triggers a compiler error. This change could break programs that currently work.

An interaction between translate rules, nested parse actions, and entities has been fixed.

File output using the options -log or -alog is now unbuffered.

OmniMark 5.1.1

OmniMark 5.1 had an error in the operation of do scan, repeat scan, and submit. When a match statement or a find rule started with value-start and the string matched was greater than 108 characters, the match failed when it shouldn't have.

OmniMark 5.1

The following corrections have been made in OmniMark 5.1:

OmniMark 5

The following OmniMark errors have been corrected in OmniMark 5:

Using the statement:

      Set function-library of external-function asf to ""
made any subsequent call to external function asf cause a fatal error, and an operating system call message would be displayed.

The Date and Time library had several problems:

On Digital UNIX (OSF), internal error 14-683 arose because binary conversion was limited to 1 to 4 character strings, even though counters on that platform could be up to 8 bytes long.

When an SGML document was submitted to do sgml-parse and it had a comment in the instance not ended in the document entity, OmniMark reported an internal error.

The code

  ...
  do sgml-parse document scan input f()
  ...
first gave the correct error message that the input function wasn't internal, but then hit internal error 87-2265: define external function f () as "f".

A do sgml-parse instance, using a previously saved DTD, could cause an OmniMark internal error if another DTS was encountered within the instance.

As a result of error recovery in a bad mixed content model, customer-supplied documents could cause the SGML parser to go into an infinite loop, emitting record-end characters.

The erroneous pattern

  find ('href="' [^'"']* uc [^'"']* '"') => link
caused an infinite loop, and produced the message "Expecting start of a pattern, but received '^'".

On HttpRequestSend, the response could have a returned status of "200 - OK" even if the connection failed.

Internal error 116-4875 arose when you used put #sgml in an input function, wrote something to #error, and used an sgml-error rule elsewhere.

For code:

   output file "dir" || "/" || "Filename"
trying to read the file "dir", a directory, triggered an "interpreter read abort".

Jackhammer reported a segmentation fault when trying to handle empty files or data files with a header but no body.

The mail library would hang when reading certain messages from the InMailBox.

When messages were marked for deletion, MailInBoxGetMessage would deny you access to the other, non-marked messages.

When using no-default-io and sgml-error rules, an error reported that #main-output was unavailable.

OCI_odespp incorrectly handles the defsup, mode, and radix arguments.

For opaque arguments (modifiable and read-only), OmniMark didn't detect that you had specified the wrong opaque type.

Opaque expressions could not be parenthesized.

When trying an output-to on a local stream that had more than one item, a segmentation fault resulted when the stream was closed.

When trying to output to a modifiable stream parameter using item number indexing, you still output to the default item.

Improvements needed to pattern-matching performance when patterns started with dynamic strings. For example, the find rule in the following code would incorrectly attempt to match "a":

  global stream s

  find "b%g(s)"  ; s is open
    output "B"

  process
    submit "abc%n"

External functions didn't process read-only variables when followed by remainder arguments. The read-only shelf appeared, usually incorrectly, to have the same number of arguments as the following remainder shelf.

Entering the command line omnimark -s prog.xom -s prog.xom produced the message: "The instruction at 0x... referenced memory at 0x... The memory could not be written."

When OmniMark couldn't open a file for writing, and quit with an error message, a segmentation fault resulted when it tried to close the unopened file.

The #sgml stream allowed translation and line breaking, but shouldn't.

When sgml-error was false, an internal error was produced in the debugger.

The sgml-in and sgml-out actions were not allowed in functions or inside do sgml-parse blocks.

If a non-text entity reference occurs within a text entity referenced from within RCDATA element content, the SGML parser erroneously reports that an entity referenced prior to the start of the RCDATA element is ended within the element's content.

When a non-SGML character occurred in CDATA element content, and it occurred immediately following a non-stripped record-end character (that is, one not at the start or end of the element), the OmniMark's SGML parser didn't recognize it and reported an "impossible" error. This error, in turn, caused OmniMark itself to terminate abnormally (for example, a segmentation error).

Garbled syntax error messages were generated by code:

  set integer j to item of attributes lastmost

The message was: Syntax Error. Expecting "The keyword 'ATTRIBUTES' cannot be used with the 'LASTMOST' indexer", but received "SET".

Testing to see if file "" existed triggered a non-recoverable error message.

On VAX/VMS, accessing a nonexistent directory caused an access violation.

When compiling with -warnings, a warning appeared that a stream opened only as an external output stream might be used incorrectly, even when it was opened, written to, and closed.

An internal error message was generated when using -warnings and -limit, and the warning level was exceeded in the compiler. The following program triggered the message:

  process
  local integer i
  local integer j
  local integer k
  process
  output "hello%n"

Command line was:

  omnimark -s prog.xom -limit 2 -warning

Generated message was:

  omnimark --
  OmniMark Warning on line 5 in file tr5447b.xom:
  A shelf is possibly not being used as intended.
  The local integer 'K' is never initialized or used.

  omnimark --
  OmniMark Warning on line 5 in file tr5447b.xom:
  A shelf is possibly not being used as intended.
  The local integer 'J' is never initialized or used.

  There were 2 warnings detected.
  Internal Error.

In Windows NT, specifying -library followed by a non-conforming library file on the OmniMark 4.0 command line caused a memory fault.

On Windows 95/98/NT platforms, a memory error occurred when the following command line was issued: omnimark -term.

OmniMark sometimes terminated with a segmentation fault when parsing an XML document with more than one ATTLIST declaration for an element.

OmniMark 4.0.2

The following errors have been corrected in OmniMark CI 4.0.2:

The following errors have been corrected in the OmniMark Kernel:

OmniMark 4.0.1

The following errors have been corrected in OmniMark CI 4.0.1:

OmniMark 4

The following list of OmniMark errors found in V3R1a have been fixed in 4.0:

Memory Leaks

If an external function signals an exception in nested do sgml-parse's, memory is leaked.

Programs that contained both sgml-error rules and explicit references to the #sgml stream leak memory when the sgml-error rules are executed.

Writing single values larger than 8 Kb to the #sgml stream leaked memory.

Parsing documents that have a document element that has a CDATA attribute leaked memory.

Programs that write to the #sgml stream from an sgml-error rule leaked memory.

Programs that accessed data attributes leaked memory.

do sgml-parse

Specifying an unknown element in a do sgml-parse instance with document-element unknown-element caused OmniMark to crash.

In process programs, the state of the #sgml stream is attached after a non-nested do sgml-parse action was executed. It should be unattached.

Accessing the dtds shelf with a nonexistent key in a do sgml-parse instance with dtds key "unknown-key" causes OmniMark to crash.

The SGML stream isn't being flushed for find rules that contain embedded conditions such as find "&" (when number of current elements > 0). This means that the test can potentially fail when it should have succeeded.

Functions

The following code, which accesses an optional, unspecified function argument, does not report an access error in the second action:

  output x when x is specified
  output x

Passing a constant as a read-only function parameter causes OmniMark to crash.

Function argument heralds sharing the same prefix are not being properly distinguished. Consider this definition:

  define function foo sk1 read-only switch n1 optional
                       sk   value integer n2 optional
                       as
           ...
Now calling the function so:
  foo sk 1
The herald "sk" is mistaken for the herald "sk1".

Executing the submit action in a function invoked by an sgml-error rule causes an internal error.

The method OMXF_GetBinaryOrderingValue now returns the correct binary ordering.

Programs that try to match patterns of size > 2k when using external source functions fail.

Using the copy action to copy to a modifiable shelf argument corrupts the shelf.

The following code, where "arg" is an optional function argument, causes an internal error. In V3R0 the internal error is 86-440 and in V3R1a it is 86-335:

  output sample when sample is specified
  do when sample is specified
     output sample
  done

The following code, which creates and removes the same keyed item from a shelf with an initial -size of 0, causes OmniMark to crash:

       global stream s var initial-size 0
       process
          new s key "some"
          new s
          remove s
          new s key "some"

Miscellaneous

Copying one stream shelf to another changed the target shelf's name for some error messages.

OmniMark enters an infinite loop while writing to a file when the disk is full.

Assigning to a shelf with a declared size greater than 1 from the command line was not being reported as an error.

Stream items assigned multi-part values via a set action did not have the stream's name attached to the stream item. The internal stream #ANONYMOUS name was instead attached.

The test do when file x is writable applied to a file that does not exist, where the directory it names does exist and is writable, now correctly returns the value true.

The following incorrect code is incorrectly reported:

  process
    set #first to true

The error message now refers to switch #last instead of #first.

The test attributes has key x applied to an element that has no attributes causes OmniMark to crash.

Trying to match entity names with the following pattern when there are only lowercase letters causes OmniMark to report an "insufficient memory error" and then terminate:

  translate entity named (lc+ [lc or digit]+=>lower) => ent-name

Empty strings are incorrectly parsed in command-line argument files.

The expression do when file <my-file> matches <string expression> does not work.

An OmniMark program is limited to 8 MB of constant strings.

The rule translate entity valued any+ named any+ is declared to be an error.

       
----

Top [ INDEX ] [ CONCEPTS ] [ TASKS ] [ SYNTAX ] [ LIBRARIES ] [ OMX ] [ OMX ] [ ERRORS ]

Generated: August 11, 2000 at 3:06:31 pm
If you have any comments about this section of the documentation, send email to docerrors@omnimark.com

Copyright © OmniMark Technologies Corporation, 1988-2000.