1. Any call to FbException.catchException(nil, e) will raise Access Violation
in catchException procedure.
function IUdrPluginImpl_getMasterDispatcher(this: IUdrPlugin): IMaster; cdecl;
begin
try
Result := IUdrPluginImpl(this).getMaster();
except
on e: Exception do FbException.catchException(nil, e); // There are 299
such places in code (with first nil parameter).
end
end;
class procedure FbException.catchException(status: IStatus; e: Exception);
var
statusVector: array[0..4] of NativeIntPtr;
msg: AnsiString;
begin
if (e.inheritsFrom(FbException)) then
status.setErrors(FbException(e).getStatus.getErrors)
else
begin
msg := e.message;
statusVector[0] := NativeIntPtr(isc_arg_gds);
statusVector[1] := NativeIntPtr(isc_random);
statusVector[2] := NativeIntPtr(isc_arg_string);
statusVector[3] := NativeIntPtr(PAnsiChar(msg));
statusVector[4] := NativeIntPtr(isc_arg_end);
status.setErrors(@statusVector);
end
end;
2. On "msg := e.message" all unicode characters will be lost:
- E.Message is utf-16 string for Delphi 2009 and higher
- E.Message is ansi string for Delphi 2007 and lower
- E.Message is compiler switches dependent for freepascal 3.0.0 and higher
(default is utf-8)
3. Maybe we need to put a sample of firebird.pas at github. It will allow other
developers to patch it in more productive way than now.
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel