Не закрашиваются прямоугольники. Ошибка имеет процессорозависимый характер $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
Актуальный perl-GD: # rpm -q perl-GD perl-GD-2.41-alt1
(В ответ на комментарий №1) > Актуальный perl-GD: > > # rpm -q perl-GD > perl-GD-2.41-alt1 Не могу на роутере проверить -- стоит не правильная версия librpm
(В ответ на комментарий №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.
Для информации: в актуальной сборке 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 года.
> > Резюме: > 1. На текущей пакетной базе Сизифа не воспроизводится. > 2. Даже если описанное поведение считать багом, это бага libgd, а не perl-GD. У меня воспроизводится только на одном компьютере. Процессор я указал. Очень похоже нарвались на оптимизацию. [user@server ~]$ rpm -qa | grep libgd libgd2-2.0.34-alt2
(В ответ на комментарий №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!!
> Вы указали в примере когда прямоугольники не закрашиваются НЕВЕРНЫЕ параметры > для функции. Код, который это проверяет и переставляет параметры в правильном > порядке добавлен в libgd 6 мая 2007, а у Вас стоит пакет с версией libgd > 2.0.34, которая вышла в феврале 2007!! Ясно. Спасибо.