Strings Delphi

Title: Bug in StringReplace (Handling Null characters) (fixed)
Question: I've noticed a problem when you try to use StringReplace on a string which contains NULL (#0) characters (not null terminated).
Answer:
There is an undocumented bug in the StringReplace function.
It appears that it does not handle strings will NULL (#0) characters in them.
Here is a better routine which handles NULL correctly.
function customStringReplace(OriginalString, Pattern, Replace: string): string;
{-----------------------------------------------------------------------------
Procedure: customStringReplace
Date: 07-Feb-2002
Arguments: OriginalString, Pattern, Replace: string
Result: string
Description:
Replaces Pattern with Replace in string OriginalString.
Taking into account NULL (#0) characters.
I cheated. This is ripped almost directly from Borland's
StringReplace Function. The bug creeps in with the ANSIPos
function. (Which does not detect #0 characters)
-----------------------------------------------------------------------------}
var
SearchStr, Patt, NewStr: string;
Offset: Integer;
begin
Result := '';
SearchStr := OriginalString;
Patt := Pattern;
NewStr := OriginalString;
while SearchStr '' do
begin
Offset := Pos(Patt, SearchStr); // Was AnsiPos
if Offset = 0 then
begin
Result := Result + NewStr;
Break;
end;
Result := Result + Copy(NewStr, 1, Offset - 1) + Replace;
NewStr := Copy(NewStr, Offset + Length(Pattern), MaxInt);
SearchStr := Copy(SearchStr, Offset + Length(Patt), MaxInt);
end;
end;