It looks like a bug may have been introduced in DataAbstract for Delphi build 1479 in method TROMacroParser.Eval (in unit uDAMacros.pas). The final else clause contains the following lines:
if l > Length(r) then SetLength(r, l + LenInc); r[l] := p[i]; inc(l);
where “r” is a TCharArray.
In previous builds the “inc(l)” was located before the other lines instead of after them, so r[l] would always be within the bounds of r. What happens now is that when l = Length®, r[l] is past the end of the array. On the next pass, when l > Length®, the most recently added Char gets overwritten with a
#0 by the call to SetLength, resulting in a prematurely truncated string.