Critial fail if lib not installed.

a_c_m - June 26, 2008 - 08:38
Project:getID3()
Version:5.x-1.x-dev
Component:Code
Category:bug report
Priority:critical
Assigned:Unassigned
Status:closed
Description

After applying the patch you left for the Mediafield module (http://drupal.org/node/144674), i would get a critical fail when trying to edit any node with a mediafield on it.

Fatal error: Class 'getID3' not found in .../sites/all/modules/getid3/getid3.module on line 59

The problem is 2 fold, first

<?php
/**
* Loads the getID3 library once and returns whether it was successfully loaded.

* @return
*   Boolean indicating if the library was loaded
*/
function getid3_load($display_warning = TRUE) {
  @(include_once(
getid3_get_path() .'/getid3/getid3.php')) or _getid3_library_not_found($display_warning);
 
$version = GETID3_VERSION;
  return !empty(
$version);
}
?>

The line "return !empty($version);" will never return false (on my install of php at least) as even if GETID3_VERSION was not set by getid3.php it will be "GETID3_VERSION" and so never empty, a better check is "return ($version != 'GETID3_VERSION');"

Part 2 is that this variable returned from getid3_load() is never used by getid3_instance()

<?php

/**
* Create and initialize an instance of getID3 class.
*/
function &getid3_instance() {
 
getid3_load();
 
$id3 = new getID3();
 
$id3-> option_md5_data = true;
 
$id3-> option_md5_data_source = true;
 
$id3-> encoding = 'UTF-8';
  return
$id3;
}
?>

this should instead be

<?php

/**
* Create and initialize an instance of getID3 class.
*/
function &getid3_instance() {
 
$id3 = null;
  if (
getid3_load()) {
   
$id3 = new getID3();
   
$id3-> option_md5_data = true;
   
$id3-> option_md5_data_source = true;
   
$id3-> encoding = 'UTF-8';
  }
  return
$id3
}
?>

I've attached a patch to this effect.

AttachmentSize
versioncheck.patch961 bytes

#1

a_c_m - June 26, 2008 - 08:42

oh also i'm going to still install your patch for MediaField but with a bit of extra logic which will become redundant once this patch (or similar) is installed, just FYI.

#2

Rob Loach - June 26, 2008 - 16:54
Version:5.x-1.1» 6.x-1.x-dev
Status:needs review» fixed

http://drupal.org/cvs?commit=123697
http://drupal.org/cvs?commit=123696

If there's still a problem with it, please feel free to re-open the issue.

#3

drewish - June 27, 2008 - 05:30

i'd have preferred to have backported the defined('GETID3_VERSION') fix i did in D6 for the first problem:

<?php
/**
* Loads the getID3 library once and returns whether it was successfully loaded.
*
* @return
*   Boolean indicating if the library was loaded
*/
function getid3_load($display_warning = TRUE) {
 
$getid3_path = getid3_get_path();

  if (
file_exists($getid3_path .'/getid3.php') && file_exists($getid3_path .'/write.php')) {
   
// A little workaround for getID3 on Windows.
   
if (!defined('GETID3_HELPERAPPSDIR')) {
     
define('GETID3_HELPERAPPSDIR', realpath($getid3_path .'/../helperapps') .'/');
    }
    include_once(
$getid3_path .'/getid3.php');

   
// Initialize getID3 tag-writing module. NOTE: Their wanky dependency setup
    // requires that this file must be included AFTER an instance of the getID3
    // class has been instantiated.
   
$getid3 = new getID3;
    require_once(
$getid3_path .'/write.php');

    return
defined('GETID3_VERSION');
  }
  else {
   
drupal_set_message(t("The getid3() module cannot find the getID3 library used to read and write ID3 tags. The site administrator will need to verify that it is installed and then update the <a href='!admin-settings-audio-getid3'>settings</a>.", array('!admin-settings-audio-getid3' => url('admin/settings/getid3'))), 'error', FALSE);
    return
FALSE;
  }
}
?>

but the fix for the second problem is probably correct.

#4

Rob Loach - June 27, 2008 - 18:12
Status:fixed» active

That sounds reasonable.

#5

drewish - August 6, 2008 - 00:15
Version:6.x-1.x-dev» 5.x-1.x-dev
Status:active» fixed

i think this is "fixed" in d6 so if there's still an issue it's in 5. i'm willing to let sleeping dogs lie (lye?, lay?).

#6

Anonymous (not verified) - August 20, 2008 - 00:23
Status:fixed» closed

Automatically closed -- issue fixed for two weeks with no activity.

 
 

Drupal is a registered trademark of Dries Buytaert.