Delphi's NewStr returns a valid pointer for empty strings. FreePascal returns nil.
Delphi's AssignStr accepts nil and allocates new memory. FreePascal throws an "Access violation" on nil.
AssignStr(S, 'New String');
Effectively it means NewStr('')'s must be replaced with at lease a space, or the following code.
P := NewStr(' ');
AssignStr(P, '');
Since empty strings return a nil, all code which de-references empty strings must check for nil before doing so.
Tested against Delphi 11 and FPC 3.2.2