Wow, that was a lot of code! So here's what we wound up doing:

1. Added some logic that tries different magicdb locations at install or
upgrade time. If it finds one that works, it stores that in a config
option and always uses that one. If it finds that none work, then it
won't try to use fileinfo in the future.

2. Added a config-defaults.php option for advanced users to specify a
different magic db location.

3. Added a parameter to file_mime_type() that allows it to get the
original (uploaded) name of the file, so that if fileinfo doesn't work
we can check the file's extension.

4. Changed the upload code so that it trusts file_mime_type() more than
it trusts the browser-supplied mimetype

** Changed in: mahara/1.6
       Status: In Progress => Fix Committed

** Changed in: mahara/1.7
       Status: In Progress => Fix Committed

** Changed in: mahara/1.9
       Status: In Progress => Fix Committed

-- 
You received this bug notification because you are a member of Mahara
Contributors, which is subscribed to Mahara.
Matching subscriptions: Subscription for all Mahara Contributors -- please ask 
on #mahara-dev or mahara.org forum before editing or unsubscribing it!
https://bugs.launchpad.net/bugs/1249858

Title:
  Mahara can't figure out mime types because of a finfo() bug

Status in Mahara ePortfolio:
  Fix Committed
Status in Mahara 1.6 series:
  Fix Committed
Status in Mahara 1.7 series:
  Fix Committed
Status in Mahara 1.8 series:
  Fix Committed
Status in Mahara 1.9 series:
  Fix Committed

Bug description:
  There have been several notable Mahara bugs based around the fact that
  our current handling of mimetypes is broken.

  See for instance:
   - https://bugs.launchpad.net/mahara/+bug/1220639
   - https://bugs.launchpad.net/mahara/+bug/1249166

  The problem is this:

  1. You can't really trust the mimetype that the browser sends to you, because 
different browsers send different wacky things
  2. Mahara has long used its own function file_mime_type() in lib/file.php for 
this purpose
  3. file_mime_type() preferentially uses finfo() to check the mimetype. But, 
there's a bug in finfo() with an external magic db, which is how it is 
distributed on Ubuntu presently: https://bugs.php.net/bug.php?id=61940
  4. file_mime_type() falls back to mime_content_type(). But that's now 
deprecated
  5. If neither of those works, we fall back to trusting what the browser told 
us, which isn't really the best (see #1)

To manage notifications about this bug go to:
https://bugs.launchpad.net/mahara/+bug/1249858/+subscriptions

_______________________________________________
Mailing list: https://launchpad.net/~mahara-contributors
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~mahara-contributors
More help   : https://help.launchpad.net/ListHelp

Reply via email to