Bug 858653 - fileinfo extension: use stat function from stream wrapper
fileinfo extension: use stat function from stream wrapper
Status: CLOSED ERRATA
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: php (Show other bugs)
6.3
All Linux
unspecified Severity unspecified
: rc
: ---
Assigned To: Web Stack Team
Lukas Zachar
:
Depends On:
Blocks: 869697
  Show dependency treegraph
 
Reported: 2012-09-19 06:27 EDT by Jani Ollikainen
Modified: 2013-02-21 05:14 EST (History)
3 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 869697 (view as bug list)
Environment:
Last Closed: 2013-02-21 05:14:29 EST
Type: Bug
Regression: ---
Mount Type: ---
Documentation: ---
CRM:
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---


Attachments (Terms of Use)


External Trackers
Tracker ID Priority Status Summary Last Updated
PHP Bug Tracker 54016 None None None 2012-09-19 06:27:30 EDT

  None (edit)
Description Jani Ollikainen 2012-09-19 06:27:30 EDT
Description of problem:
PHP has broken Fileinfo that doesn't support wrappers even it has
context parameter for them.

Version-Release number of selected component (if applicable):
PHP 5.3.0-5.3.5

How reproducible:
Try to use Fileinfo to get info from some wrapper ex. http://

Steps to Reproduce:
<?php
$url="http://74.125.143.94/images/srpr/logo3w.png";
$finfo=new finfo(FILEINFO_MIME);
$str_mime = $finfo->file($url);
var_dump($str_mime);
?>

Actual results:
PHP Warning:  finfo::file(): File or path not found 'http://74.125.143.94/images/srpr/logo3w.png' in - on line 4
bool(false)

Expected results:
string(9) "image/png"

Additional info:
The old PECL Fileinfo module works, so if one installs that into RHEL5 it works, but as RHEL6 has Fileinfo itself which is broken, there's no nice way to
fix this (without just copying a working Fileinfo over the broken one, which is bad way).

Luckily this problem can be avoided by coding differently, but the problem is
all the existing systems which relies that it just works<tm>.

But that patch to fix it, would be nice to get into RHEL6.

Workaround:
<?php
$url="http://74.125.143.94/images/srpr/logo3w.png";
$finfo=new finfo(FILEINFO_MIME);
$str_mime=$finfo->buffer(file_get_contents($url));
var_dump($str_mime);
?>
Comment 1 Jani Ollikainen 2012-09-19 06:31:50 EDT
Forgot to mention about the workaround that of course it's very bad with big files as now the whole file is loaded to string before trying to figure out what it is. If one has big files, probably just reading max 1k of the file would be better and then giving that to buffer().
Comment 3 Joe Orton 2012-09-19 09:45:59 EDT
Hi, thanks for contacting us.

finfo::file() takes a filename argument by string.  Are some docs somewhere which say otherwise?

http://www.php.net/manual/en/function.finfo-file.php
Comment 4 Jani Ollikainen 2012-09-19 11:55:54 EDT
No, filename as a argument is a string. Filename can be URI as it's a string. You see similar documentation here: http://php.net/manual/en/function.file-get-contents.php

And the workaround uses that, which is documented as is that finfo-file, there's string for filename and context for stream wrappers.
Comment 5 Joe Orton 2012-09-20 03:53:01 EDT
Ah, thanks, sorry, I missed the upstream bug reference.

Fixed in http://svn.php.net/viewvc?view=revision&revision=308327
Comment 6 Remi Collet 2012-10-05 02:53:39 EDT
The linked upstream bug refers to "stream". Applying the upstream patch works for some stream wrappers (tested with zip, from upstream unit test).

Despite this patch, your test script doesn't work (even with latest upstream PHP version 5.4.8RC1). It seems http streams are curently not supported (need stat and seek capabilities)

Need more investigation.
Comment 7 Joe Orton 2012-10-05 03:31:02 EDT
Good point.  So there are two problems here:

1) the fileinfo extension does not use the stat interface from the stream wrapper.

2) the http stream wrapper does not support the stat interface

The upstream patch referenced above does fix (1), but not (2).  So it would fix use of e.g. zip:// URLs.  We can pull in that fix.

Jani, if you also require a fix for (2) can you file a new bug?  Supporting http stat is an enhancement request, we'd have to get a fix accepted upstream for that.
Comment 10 Joe Orton 2012-10-12 07:29:31 EDT
In fact my comment about the zip:// URLs was not correct for php 5.3.3; even the zip stream wrapper does not support the stat interface in that version of PHP.  

To ensure we are 100% clear about the scope of the fix for this bug, we are intending to fix here only part (1) mentioned in comment 7.

If stream wrapper support is required for other stream types, please file new enhancements bugs so we can track those requests separately.
Comment 14 errata-xmlrpc 2013-02-21 05:14:29 EST
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

http://rhn.redhat.com/errata/RHSA-2013-0514.html

Note You need to log in before you can comment on or make changes to this bug.