mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00:00
Fix incorrect check in phar tar parsing
The entry.flags was used to check whether the entry has the directory flag. The flags however were masked to only contain the permissions. We need to check the mode, before the permission masking, instead of the flags to check whether it is a directory. Closes GH-10464 Signed-off-by: George Peter Banyard <girgias@php.net>
This commit is contained in:
parent
284c29328e
commit
ec4939b170
3
NEWS
3
NEWS
@ -17,6 +17,9 @@ PHP NEWS
|
||||
- Opcache:
|
||||
. Fix incorrect page_size check. (nielsdos)
|
||||
|
||||
- Phar:
|
||||
. Fix incorrect check in phar tar parsing. (nielsdos)
|
||||
|
||||
- Standard:
|
||||
. Fixed bug GH-10292 (Made the default value of the first param of srand() and
|
||||
mt_srand() unknown). (kocsismate)
|
||||
|
@ -478,14 +478,15 @@ bail:
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
uint32_t entry_mode = phar_tar_number(hdr->mode, sizeof(hdr->mode));
|
||||
entry.tar_type = ((old & (hdr->typeflag == '\0')) ? TAR_FILE : hdr->typeflag);
|
||||
entry.offset = entry.offset_abs = pos; /* header_offset unused in tar */
|
||||
entry.fp_type = PHAR_FP;
|
||||
entry.flags = phar_tar_number(hdr->mode, sizeof(hdr->mode)) & PHAR_ENT_PERM_MASK;
|
||||
entry.flags = entry_mode & PHAR_ENT_PERM_MASK;
|
||||
entry.timestamp = phar_tar_number(hdr->mtime, sizeof(hdr->mtime));
|
||||
entry.is_persistent = myphar->is_persistent;
|
||||
|
||||
if (old && entry.tar_type == TAR_FILE && S_ISDIR(entry.flags)) {
|
||||
if (old && entry.tar_type == TAR_FILE && S_ISDIR(entry_mode)) {
|
||||
entry.tar_type = TAR_DIR;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user