WildSery wrote:
On Thu, 30 Nov 2006 20:24:24 +0300, Dmitri Kuzmenko <[EMAIL PROTECTED]> wrote:
я уж не помню, чье это, но вообще так нельзя. т.е.
за if (Test = nil) or (Test.dsc_address = nil)
я бы руки отрубал.

Почему нельзя-то?
В языках программирования оно вроде очень давно так, неполная проверка т.е.

Насколько я понемаю, то получается что проверяется ВСЕ условия, тоесть
неостанавливается если уже первое True, значит при втором уже
получаем AV если Test = nil ...

Я вот в Ibtypes.pas подправил ето:

Result := (@Param = nil) or (Param.Address = nil) or ((Param.Flags and UDF_Flag_Null)<>0)

На:
  Result := (@Param = nil);
  If Result Then
    Exit;
  Result := (Param.Address = nil);
  If Result Then
    Exit;
  Result := ((Param.Flags and UDF_Flag_Null)<>0);

Неутверждаю что самыи правильныи путь, но
паданье пропало ...

Кстати тамже есть функция UDF_GetString и если
в UDF попадает стринг с нулевои длинои тоесть '' , то тута тоже сервер валится :(

Там я нелез править, а то несовсем рублю фишку там :)
Перед UDF_GetString шас делаю проверку на длину,
например If ATextValue.Length = 0 Then блаблабла;


Regards
Janex

P.S
  В начале Ibtypes.pas видим:   
Copyright (С) 1998-2000 RCAV
Автор: Олег Иванов




Ответить