]> granicus.if.org Git - php/commitdiff
fix off-by-one for writing of timestamp and file modes in tar files
authorGreg Beaver <cellog@php.net>
Mon, 28 Apr 2008 06:49:56 +0000 (06:49 +0000)
committerGreg Beaver <cellog@php.net>
Mon, 28 Apr 2008 06:49:56 +0000 (06:49 +0000)
ext/phar/tar.c

index eeb8c2a7051b98a13924f908b1dc0b2015656f46..e8dceccac5326b166ff5556bf87905f1aa2fe76f 100644 (file)
@@ -434,14 +434,14 @@ int phar_tar_writeheaders(void *pDest, void *argument TSRMLS_DC)
        } else {
                memcpy(header.name, entry->filename, entry->filename_len);
        }
-       phar_tar_octal(header.mode, entry->flags & PHAR_ENT_PERM_MASK, sizeof(header.mode));
+       phar_tar_octal(header.mode, entry->flags & PHAR_ENT_PERM_MASK, sizeof(header.mode)-1);
        if (FAILURE == phar_tar_octal(header.size, entry->uncompressed_filesize, sizeof(header.size))) {
                if (fp->error) {
                        spprintf(fp->error, 4096, "tar-based phar \"%s\" cannot be created, filename \"%s\" is too large for tar file format", entry->phar->fname, entry->filename);
                }
                return ZEND_HASH_APPLY_STOP;
        }
-       if (FAILURE == phar_tar_octal(header.mtime, entry->timestamp, sizeof(header.mtime))) {
+       if (FAILURE == phar_tar_octal(header.mtime, entry->timestamp, sizeof(header.mtime)-1)) {
                if (fp->error) {
                        spprintf(fp->error, 4096, "tar-based phar \"%s\" cannot be created, file modification time of file \"%s\" is too large for tar file format", entry->phar->fname, entry->filename);
                }