fix для "AV при доступе к последней строке TStringGrid&

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

fix для "AV при доступе к последней строке TStringGrid&

Сообщение Padre_Mortius » 19.09.2007 17:03:15

В svn версии Lazarus при доступе к последней строке StringGrid программа вылетает с AV. Ошибка была найдена в модуле grids.pas

Оригинальный код

Код: Выделить всё
function TVirtualGrid.GetCells(Col, Row: Integer): PCellProps;
begin
  // todo: Check range
  Result:=nil;
  if (Col<0) or (Row<0) or (Col>=ColCount) or (Row>=RowCount) then
    raise EGridException.CreateFmt(rsIndexOutOfRange, [Col, Row]);
  Result:=FCells[Col,Row];
end;


Исправленный код

Код: Выделить всё
function TVirtualGrid.GetCells(Col, Row: Integer): PCellProps;
begin
  // todo: Check range
  Result:=nil;
  if (Col<0) or (Row<0) or (Col>ColCount) or (Row>RowCount) then
    raise EGridException.CreateFmt(rsIndexOutOfRange, [Col, Row]);
  Result:=FCells[Col,Row];
end;


Может быть то-нить из тех у кого с английским лучше чем у меня сообщит об этой ошибке

P.S. Patch
Код: Выделить всё
Index: grids.pas
===================================================================
--- grids.pas   (revision 12076)
+++ grids.pas   (working copy)
@@ -6722,7 +6722,7 @@
begin
   // todo: Check range
   Result:=nil;
-  if (Col<0) or (Row<0) or (Col>=ColCount) or (Row>=RowCount) then
+  if (Col<0) or (Row<0) or (Col>ColCount) or (Row>RowCount) then
     raise EGridException.CreateFmt(rsIndexOutOfRange, [Col, Row]);
   Result:=FCells[Col,Row];
end;
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Павел Ишенин » 21.09.2007 09:49:56

Сообщил тому, кто гридом занимается
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Сообщение Павел Ишенин » 21.09.2007 09:53:05

Разработчик просит тестовое приложение
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Сообщение Padre_Mortius » 21.09.2007 12:01:59

Куда отправить можно? Отправлю скорее всего н выходных. Там времени будет немного больше.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение shade » 21.09.2007 12:52:04

Padre_Mortius
Не вижу ошибки.
1. нумерация с нуля, потому не могут быть отрицательные индексы
2. нумерация с нуля, потому индекс (Row/Col)Count не допустим, например если ColCount = 3, то допустимо три индекса 0, 1, 2

потому оригинальная проверка
Код: Выделить всё
(Col<0) or (Row<0) or (Col>=ColCount) or (Row>=RowCount)

верна

Индекс последней строки будет RowCount - 1, если RowCount <> 0
Если RowCount = 0, то последней строки просто нет :wink:
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Padre_Mortius » 21.09.2007 13:30:30

Значит туплю жутко. :oops: Прийду домой еще раз все перепроверю.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Павел Ишенин » 21.09.2007 16:40:39

Если что, то можно скидывать в баг трекер
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Сообщение Browny » 21.09.2007 17:22:59

Padre_Mortius
не подтверждаю. В svn 11933, snapshot 04.09.2007, всё работает корректно, независимо от FixedRows и RowCount. При обращении к несуществующей ячейке исправно возникает Exception.

Другой вопрос, что странное поведение при RowCount=0 или ColCount=0. Если эти значения выставлены в DesignTime, то при запуске в RunTime появляется дефолтная сетка 5x5. Приходится убирать ячейки в RunTime. Сейчас попробую посмотреть код...
Аватара пользователя
Browny
новенький
 
Сообщения: 37
Зарегистрирован: 31.08.2007 10:42:55

Сообщение Browny » 21.09.2007 17:37:46

Да, в grid.pas конструктор TCustomGrid.Create в рантайме делает ячейки. Предлагаю убрать оттуда и поставить default <значение> для proprty RowCount и property ColCount.
Аватара пользователя
Browny
новенький
 
Сообщения: 37
Зарегистрирован: 31.08.2007 10:42:55

Сообщение alexs » 21.09.2007 19:15:16

напиши автору грида - Jesus Reyes
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru