[PHP-BUG] Bug #65288 [NEW]: ZipArchive::getStatusString returns wrong error message

2013-07-18 Thread crayonviolent at phpfreaks dot com
From: crayonviolent at phpfreaks dot com
Operating system: Irrelevant
PHP version:  Irrelevant
Package:  Zip Related
Bug Type: Bug
Bug description:ZipArchive::getStatusString returns wrong error message

Description:

>From the code below, if $file_name is a valid file found within $zip_file,
the 
contents are echo'd just fine.  However, if the $file_name is not found,
$fp 
returns false and getStatusString() is echo'd.  The problem is that it is
echoing 
"No error".  Shouldn't it be returning "No such file" (ER_NOENT) ?

Maybe this is actually a bug with ZipArchive::getStream or a combo of
both?


Test script:
---
/ begin code /
$zip_file='someZip.zip';
$file_name='someFile.txt';
$z = new ZipArchive();
if ($z->open($zip_file) !== true) {
  echo "File not found.";
  return false;
}
$fp = $z->getStream($file_name);
if (!$fp) {
  echo $z->getStatusString();
} else {
  fpassthru($fp);
}
/* end code **/


-- 
Edit bug report at https://bugs.php.net/bug.php?id=65288&edit=1
-- 
Try a snapshot (PHP 5.4):   
https://bugs.php.net/fix.php?id=65288&r=trysnapshot54
Try a snapshot (PHP 5.3):   
https://bugs.php.net/fix.php?id=65288&r=trysnapshot53
Try a snapshot (trunk): 
https://bugs.php.net/fix.php?id=65288&r=trysnapshottrunk
Fixed in SVN:   https://bugs.php.net/fix.php?id=65288&r=fixed
Fixed in release:   https://bugs.php.net/fix.php?id=65288&r=alreadyfixed
Need backtrace: https://bugs.php.net/fix.php?id=65288&r=needtrace
Need Reproduce Script:  https://bugs.php.net/fix.php?id=65288&r=needscript
Try newer version:  https://bugs.php.net/fix.php?id=65288&r=oldversion
Not developer issue:https://bugs.php.net/fix.php?id=65288&r=support
Expected behavior:  https://bugs.php.net/fix.php?id=65288&r=notwrong
Not enough info:
https://bugs.php.net/fix.php?id=65288&r=notenoughinfo
Submitted twice:
https://bugs.php.net/fix.php?id=65288&r=submittedtwice
register_globals:   https://bugs.php.net/fix.php?id=65288&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=65288&r=php4
Daylight Savings:   https://bugs.php.net/fix.php?id=65288&r=dst
IIS Stability:  https://bugs.php.net/fix.php?id=65288&r=isapi
Install GNU Sed:https://bugs.php.net/fix.php?id=65288&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=65288&r=float
No Zend Extensions: https://bugs.php.net/fix.php?id=65288&r=nozend
MySQL Configuration Error:  https://bugs.php.net/fix.php?id=65288&r=mysqlcfg



Bug #65288 [Fbk->Opn]: ZipArchive::getStatusString returns wrong error message

2013-07-19 Thread crayonviolent at phpfreaks dot com
Edit report at https://bugs.php.net/bug.php?id=65288&edit=1

 ID: 65288
 User updated by:crayonviolent at phpfreaks dot com
 Reported by:crayonviolent at phpfreaks dot com
 Summary:ZipArchive::getStatusString returns wrong error
 message
-Status: Feedback
+Status: Open
 Type:   Bug
 Package:Zip Related
 Operating System:   Irrelevant
 PHP Version:Irrelevant
 Block user comment: N
 Private report: N

 New Comment:

Read the example code closer.  The zip is valid and will open. It is the non 
existant file IN the zip that getStream isn't returning a proper error on


Previous Comments:

[2013-07-19 07:20:12] a...@php.net

In your example, it wouldn't even reach to getStream(). If there's no file, 
it'll 
not go through after open(). Please give an example reproducing the exact 
behavior 
you describe.

----
[2013-07-18 14:15:05] crayonviolent at phpfreaks dot com

Description:

>From the code below, if $file_name is a valid file found within $zip_file, the 
contents are echo'd just fine.  However, if the $file_name is not found, $fp 
returns false and getStatusString() is echo'd.  The problem is that it is 
echoing 
"No error".  Shouldn't it be returning "No such file" (ER_NOENT) ?

Maybe this is actually a bug with ZipArchive::getStream or a combo of both?


Test script:
---
/ begin code /
$zip_file='someZip.zip';
$file_name='someFile.txt';
$z = new ZipArchive();
if ($z->open($zip_file) !== true) {
  echo "File not found.";
  return false;
}
$fp = $z->getStream($file_name);
if (!$fp) {
  echo $z->getStatusString();
} else {
  fpassthru($fp);
}
/* end code **/







-- 
Edit this bug report at https://bugs.php.net/bug.php?id=65288&edit=1


Bug #65288 [Wfx]: ZipArchive::getStatusString returns wrong error message

2013-07-22 Thread crayonviolent at phpfreaks dot com
Edit report at https://bugs.php.net/bug.php?id=65288&edit=1

 ID: 65288
 User updated by:crayonviolent at phpfreaks dot com
 Reported by:crayonviolent at phpfreaks dot com
 Summary:ZipArchive::getStatusString returns wrong error
 message
 Status: Wont fix
 Type:   Bug
 Package:Zip Related
 Operating System:   Irrelevant
 PHP Version:Irrelevant
 Block user comment: N
 Private report: N

 New Comment:

Okay well thanks for the workaround...

But as an IMO.. getStream SHOULD return an error.  The commit comment says 
"Look 
for an entry should not raise an error".  Well the prefix of the function is 
"get" not "look".  getStream attempts to GET something, not just look to see if 
it exists.  If the purpose of the method were to ONLY check for existence, I 
would agree that if it does not find something, it should return false and no 
error should be passed to status (getStatusString). In other words, if it's 
ONLY 
job were to look for something, then the job would be complete. But the fact 
is, 
in this instance, getStream failed to complete its job. 

If I run getStream, as the name implies, I should expect to get a file stream.  
If not, I should instead receive a reason why it failed to do its job.  

Anyways, that's my 2 cents, thanks for looking into this, and thanks for the 
workaround.


Previous Comments:

[2013-07-22 07:34:48] a...@php.net

Ok, now i see what you mean. Opening a nonexistent archive item. Lookiing 
through 
the history i can see that this is an intentional change to libzip on PHP side, 
look here http://svn.php.net/viewvc/pecl/zip/trunk/lib/zip_name_locate.c?
r1=260064&r2=260074 . Not sure it's gonna change. But you can use 
->nameLocate() 
as a workaround for now.

----------------
[2013-07-19 22:41:42] crayonviolent at phpfreaks dot com

Read the example code closer.  The zip is valid and will open. It is the non 
existant file IN the zip that getStream isn't returning a proper error on


[2013-07-19 07:20:12] a...@php.net

In your example, it wouldn't even reach to getStream(). If there's no file, 
it'll 
not go through after open(). Please give an example reproducing the exact 
behavior 
you describe.

--------------------
[2013-07-18 14:15:05] crayonviolent at phpfreaks dot com

Description:

>From the code below, if $file_name is a valid file found within $zip_file, the 
contents are echo'd just fine.  However, if the $file_name is not found, $fp 
returns false and getStatusString() is echo'd.  The problem is that it is 
echoing 
"No error".  Shouldn't it be returning "No such file" (ER_NOENT) ?

Maybe this is actually a bug with ZipArchive::getStream or a combo of both?


Test script:
---
/ begin code /
$zip_file='someZip.zip';
$file_name='someFile.txt';
$z = new ZipArchive();
if ($z->open($zip_file) !== true) {
  echo "File not found.";
  return false;
}
$fp = $z->getStream($file_name);
if (!$fp) {
  echo $z->getStatusString();
} else {
  fpassthru($fp);
}
/* end code **/







-- 
Edit this bug report at https://bugs.php.net/bug.php?id=65288&edit=1