Веселая фотогалерея

Главные вкладки

Аватар пользователя Lvl Lvl 23 декабря 2008 в 11:17

Есть неплохая фотогалерея для drupal gallerix. Вроде бы. Пока не столкнешься с таким. Функция перепостроения разных типоразмеров изображений из оригинальных:

function gallerix_build_picture($pid, $operations = array('derivatives', 'iptc', 'exif', 'sort'), $source = 'original') {

  $picture = gallerix_load_picture($pid);

  // Build derivatives.
  if (in_array('derivatives', $operations)) {
    $sizes = gallerix_sizes();

    $album_path = file_directory_path() . '/gallerix/albums/' . $picture->uid . '/' . $picture->nid;

    // Delete old derivatives.
    $directory = dir($album_path);

    while (FALSE !== ($entry = $directory->read())) {
      if ($entry == '.' || $entry == '..' || isset($sizes[$entry]) || $entry == 'original') {
        continue;
      }
      gallerix_delete_directory($album_path . '/' . $entry);
    }
    ...

Функция gallerix_load_picture($pid) при некорректном $pid (если нет такой картинки) возвращает объект с пустыми путями (!). Теперь внимательно посмотрим и видим, что при передаче некорректного $pid в функцию она просто удалит все фотоальбомы ($album_path = /gallerix/albums//).

Вполне вероятно, что при штатной работе некорректного $pid в функцию передаться не может, но мне пришлось её использовать при написании собственной обвязки перепостроения типоразмеров, т.к. штатная при моем количестве не справлялась. И малейшая опечатка может привести к печальным последствиям.

Я к чему. Всегда проверяйте сторонний код Smile

Добавил такую проверку:

  $picture = gallerix_load_picture($pid);

  if ($picture->uid == 0 or $picture->nid == 0) return false;

Комментарии