Bug 21048

Summary: Не закрашиваются прямоугольники
Product: Sisyphus Reporter: Dmitry A. Kharitonov <kharpost>
Component: perl-GD2Assignee: Victor Forsyuk <force>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: major    
Priority: P3    
Version: unstable   
Hardware: all   
OS: Linux   

Description Dmitry A. Kharitonov 2009-08-12 19:32:52 MSD
Не закрашиваются прямоугольники. Ошибка имеет процессорозависимый характер

    $im->filledRectangle(50,50,100,100,15); -- закрашивается
    $im->filledRectangle(200,200,150,150,15); -- не закрашивается

[user@server ~]$ rpm -q perl-GD2
perl-GD2-2.35-alt1

повторяется на процессоре
[user@server ~]$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 6
model name      : Celeron (Mendocino)
stepping        : 5
cpu MHz         : 300.708
cache size      : 128 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 mtrr pge mca cmov pat pse36 mmx fxsr up
bogomips        : 602.16
Comment 1 Victor Forsyuk 2009-08-12 19:42:24 MSD
Актуальный perl-GD:

# rpm -q perl-GD
perl-GD-2.41-alt1
Comment 2 Dmitry A. Kharitonov 2009-08-12 20:27:17 MSD
(В ответ на комментарий №1)
> Актуальный perl-GD:
> 
> # rpm -q perl-GD
> perl-GD-2.41-alt1

Не могу на роутере проверить -- стоит не правильная версия librpm
Comment 3 Victor Forsyuk 2009-08-13 11:36:02 MSD
(В ответ на комментарий №0)
> Не закрашиваются прямоугольники. Ошибка имеет процессорозависимый характер

То есть, версии релевантных пакетов на машинах с разными процессорами были одинаковы? Только тогда наблюдая разное поведение программ можно высказывать гипотезу о процессорозависимости.

>     $im->filledRectangle(50,50,100,100,15); -- закрашивается
>     $im->filledRectangle(200,200,150,150,15); -- не закрашивается

На perl-GD-2.41-alt1 с libgd2-2.0.35-alt2 второй пример у меня тоже закрашивает прямоугольник.

Вообще говоря, во втором примере координаты указаны несколько нелогично. При вызове этой функции сначала указываются координаты левого верхнего угла, затем правого нижнего. В данном случае они указаны наоборот. Поведение функции при не совсем корректных входных данных может быть и не тем, которое ожидается (принцип "garbage in - garbage out") и считать его ошибочным можно только, если оно отличается от документированного.

При этом perl-GD выступает не более чем оберткой для функций libgd и в данном случае просто передает полученные параметры в вызов функции gdImageFilledRectangle.

Резюме: 
1. На текущей пакетной базе Сизифа не воспроизводится.
2. Даже если описанное поведение считать багом, это бага libgd, а не perl-GD.
Comment 4 Victor Forsyuk 2009-08-13 11:53:46 MSD
Для информации: в актуальной сборке libgd функция gdImageFilledRectangle содержит код для обмена местами координат, если они указаны в неправильном порядке:
  if (x1 > x2) {
          x = x1;
          x1 = x2;
          x2 = x;
  }
  if (y1 > y2) {
          y = y1;
          y1 = y2;
          y2 = y;
  }

Этот код добавлен в libgd в CVS Revision 1.49.2.8, коммит от 6 мая 2007 года.
Comment 5 Dmitry A. Kharitonov 2009-08-13 13:18:30 MSD
> 
> Резюме: 
> 1. На текущей пакетной базе Сизифа не воспроизводится.
> 2. Даже если описанное поведение считать багом, это бага libgd, а не perl-GD.

У меня воспроизводится только на одном компьютере. Процессор я указал. Очень похоже нарвались на оптимизацию.
[user@server ~]$ rpm -qa | grep libgd
libgd2-2.0.34-alt2
Comment 6 Victor Forsyuk 2009-08-13 13:27:53 MSD
(В ответ на комментарий №5)
> > 
> > Резюме: 
> > 1. На текущей пакетной базе Сизифа не воспроизводится.
> > 2. Даже если описанное поведение считать багом, это бага libgd, а не perl-GD.
> 
> У меня воспроизводится только на одном компьютере. Процессор я указал. Очень
> похоже нарвались на оптимизацию.
> [user@server ~]$ rpm -qa | grep libgd
> libgd2-2.0.34-alt2

Да никакая оптимизация здесь ни при чем! Я же в предыдущем комментарии привёл исчерпывающую информацию! И процессор тут ни при чем!

Вы указали в примере когда прямоугольники не закрашиваются НЕВЕРНЫЕ параметры для функции. Код, который это проверяет и переставляет параметры в правильном порядке добавлен в libgd 6 мая 2007, а у Вас стоит пакет с версией libgd 2.0.34, которая вышла в феврале 2007!!
Comment 7 Dmitry A. Kharitonov 2009-08-13 13:31:43 MSD
> Вы указали в примере когда прямоугольники не закрашиваются НЕВЕРНЫЕ параметры
> для функции. Код, который это проверяет и переставляет параметры в правильном
> порядке добавлен в libgd 6 мая 2007, а у Вас стоит пакет с версией libgd
> 2.0.34, которая вышла в феврале 2007!!
Ясно. Спасибо.