Hello community,
here is the log from the commit of package file for openSUSE:Factory checked in at 2012-03-27 08:56:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/file (Old)
and /work/SRC/openSUSE:Factory/.file.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "file", Maintainer is "werner@suse.com"
Changes:
--------
--- /work/SRC/openSUSE:Factory/file/file.changes 2012-01-19 09:41:35.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.file.new/file.changes 2012-03-27 08:56:28.000000000 +0200
@@ -1,0 +2,6 @@
+Wed Mar 21 12:39:50 UTC 2012 - werner@suse.de
+
+- Update to file version 5.11 (bnc#753303, CVE-2012-1571)
+ * Fix CDF parsing issues found by CERT's fuzzing tool (Will Dormann)
+
+-------------------------------------------------------------------
Old:
----
file-5.10.tar.gz
New:
----
file-5.11.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ file.spec ++++++
--- /var/tmp/diff_new_pack.BNlhZZ/_old 2012-03-27 08:56:30.000000000 +0200
+++ /var/tmp/diff_new_pack.BNlhZZ/_new 2012-03-27 08:56:30.000000000 +0200
@@ -16,25 +16,25 @@
#
-
Name: file
-BuildRequires: findutils zlib-devel
+BuildRequires: findutils
BuildRequires: libtool
+BuildRequires: zlib-devel
Url: http://www.darwinsys.com/file/
-License: BSD 2 Clause
-Group: Productivity/File utilities
# bug437293
%ifarch ppc64
Obsoletes: file-64bit
%endif
#
# Set Version also in python-magic.spec
-Version: 5.10
-Release: 1
+Version: 5.11
+Release: 0
Summary: A Tool to Determine File Types
+License: BSD-2-Clause
+Group: Productivity/File utilities
Source: ftp://ftp.astron.com/pub/file/file-%{version}.tar.gz
Source2: baselibs.conf
-Patch: file-%{version}.dif
+Patch: file-5.10.dif
Patch1: file-5.07-misc.dif
Patch4: file-4.24-autoconf.dif
Patch5: file-4.03-tex.dif
@@ -69,11 +69,12 @@
used by apsfilter to permit automatic printing of different file types.
%package -n file-devel
-License: Other uncritical OpenSource License
Summary: Include Files and Libraries mandatory for Development
+License: Other uncritical OpenSource License
Group: Development/Libraries/Other
Provides: file:/usr/include/magic.h
-Requires: file = %{version} glibc-devel
+Requires: file = %{version}
+Requires: glibc-devel
%description -n file-devel
This package contains all necessary include files and libraries needed
++++++ python-magic.spec ++++++
--- /var/tmp/diff_new_pack.BNlhZZ/_old 2012-03-27 08:56:30.000000000 +0200
+++ /var/tmp/diff_new_pack.BNlhZZ/_new 2012-03-27 08:56:30.000000000 +0200
@@ -16,18 +16,18 @@
#
-
Name: python-magic
%define build_python_bindings 1
-BuildRequires: findutils zlib-devel
+BuildRequires: findutils
BuildRequires: libtool
BuildRequires: python-devel
+BuildRequires: zlib-devel
Url: http://www.darwinsys.com/file/
-License: BSD 3 Clause, BSD 4 Clause
-Group: Development/Languages/Python
Version: 5.10
-Release: 1
+Release: 0
Summary: Python module to use libmagic
+License: BSD-3-Clause and BSD-4-Clause
+Group: Development/Languages/Python
%py_requires
Source99: file.spec
%{expand:%(sed -n -e '/^Source:/,/^BuildRoot:/p' <%_sourcedir/file.spec)}
++++++ file-5.10.tar.gz -> file-5.11.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/ChangeLog new/file-5.11/ChangeLog
--- old/file-5.10/ChangeLog 2011-12-17 18:18:00.000000000 +0100
+++ new/file-5.11/ChangeLog 2012-02-21 20:14:43.000000000 +0100
@@ -1,3 +1,7 @@
+2012-02-20 17:33 Christos Zoulas
+
+ * Fix CDF parsing issues found by CERT's fuzzing tool (Will Dormann)
+
2011-12-15 12:17 Chris Metcalf
* Support Tilera architectures (tile64, tilepro, tilegx).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/configure new/file-5.11/configure
--- old/file-5.10/configure 2011-12-30 17:49:08.000000000 +0100
+++ new/file-5.11/configure 2012-02-21 20:17:02.000000000 +0100
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for file 5.10.
+# Generated by GNU Autoconf 2.68 for file 5.11.
#
# Report bugs to .
#
@@ -709,8 +709,8 @@
# Identity of this package.
PACKAGE_NAME='file'
PACKAGE_TARNAME='file'
-PACKAGE_VERSION='5.10'
-PACKAGE_STRING='file 5.10'
+PACKAGE_VERSION='5.11'
+PACKAGE_STRING='file 5.11'
PACKAGE_BUGREPORT='christos@astron.com'
PACKAGE_URL=''
@@ -1439,7 +1439,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures file 5.10 to adapt to many kinds of systems.
+\`configure' configures file 5.11 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1509,7 +1509,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of file 5.10:";;
+ short | recursive ) echo "Configuration of file 5.11:";;
esac
cat <<\_ACEOF
@@ -1615,7 +1615,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-file configure 5.10
+file configure 5.11
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2319,7 +2319,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by file $as_me 5.10, which was
+It was created by file $as_me 5.11, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@@ -3134,7 +3134,7 @@
# Define the identity of the package.
PACKAGE='file'
- VERSION='5.10'
+ VERSION='5.11'
cat >>confdefs.h <<_ACEOF
@@ -13555,7 +13555,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by file $as_me 5.10, which was
+This file was extended by file $as_me 5.11, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -13621,7 +13621,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-file config.status 5.10
+file config.status 5.11
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/configure.ac new/file-5.11/configure.ac
--- old/file-5.10/configure.ac 2011-12-30 17:40:43.000000000 +0100
+++ new/file-5.11/configure.ac 2012-02-21 20:16:29.000000000 +0100
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(file, 5.10, christos@astron.com)
+AC_INIT(file, 5.11, christos@astron.com)
AM_INIT_AUTOMAKE()
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/magic/Magdir/audio new/file-5.11/magic/Magdir/audio
--- old/file-5.10/magic/Magdir/audio 2011-09-06 13:00:06.000000000 +0200
+++ new/file-5.11/magic/Magdir/audio 2012-02-20 17:37:34.000000000 +0100
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: audio,v 1.63 2011/09/06 11:00:06 christos Exp $
+# $File: audio,v 1.64 2012/02/20 16:37:34 christos Exp $
# audio: file(1) magic for sound formats (see also "iff")
#
# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
@@ -491,6 +491,7 @@
# From danny.milo@gmx.net (Danny Milosavljevic)
# New version from Abel Cheung
0 string MAC\040 Monkey's Audio compressed format
+!:mime audio/x-ape
4 uleshort >0x0F8B version %d
(0x08.l) uleshort =1000 with fast compression
(0x08.l) uleshort =2000 with normal compression
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/magic/Magdir/games new/file-5.11/magic/Magdir/games
--- old/file-5.10/magic/Magdir/games 2010-11-25 16:00:12.000000000 +0100
+++ new/file-5.11/magic/Magdir/games 2012-02-13 23:50:50.000000000 +0100
@@ -1,6 +1,6 @@
2 regex/c GM\\[19\\] - Octi Game
2 regex/c GM\\[20\\] - Gess Game
2 regex/c GM\\[21\\] - twix Game
#------------------------------------------------------------------------------
-# $File: games,v 1.12 2010/11/25 15:00:12 christos Exp $
+# $File: games,v 1.13 2012/02/13 22:50:50 christos Exp $
# games: file(1) for games
# Fabio Bonelli
@@ -255,3 +255,11 @@
+
+# Epic Games/Unreal Engine Package
+#
+0 lelong 0x9E2A83C1 Unreal Engine Package,
+>4 leshort x version: %i
+>12 lelong !0 \b, names: %i
+>28 lelong !0 \b, imports: %i
+>20 lelong !0 \b, exports: %i
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/magic/Magdir/gnu new/file-5.11/magic/Magdir/gnu
--- old/file-5.10/magic/Magdir/gnu 2011-12-13 14:52:48.000000000 +0100
+++ new/file-5.11/magic/Magdir/gnu 2012-01-03 18:16:54.000000000 +0100
@@ -1,19 +1,28 @@
#------------------------------------------------------------------------------
-# $File: gnu,v 1.12 2011/12/08 12:12:46 rrt Exp $
+# $File: gnu,v 1.13 2012/01/03 17:16:54 christos Exp $
# gnu: file(1) magic for various GNU tools
#
# GNU nlsutils message catalog file format
#
+# GNU message catalog (.mo and .gmo files)
+
0 string \336\22\4\225 GNU message catalog (little endian),
->4 lelong x revision %d,
->8 lelong x %d messages
+>6 leshort x revision %d.
+>4 leshort >0 \b%d,
+>>8 lelong x %d messages,
+>>36 lelong x %d sysdep messages
+>4 leshort =0 \b%d,
+>>8 lelong x %d messages
+
0 string \225\4\22\336 GNU message catalog (big endian),
->4 belong x revision %d,
->8 belong x %d messages
-# message catalogs, from Mitchum DSouza
-0 string *nazgul* Nazgul style compiled message catalog
->8 lelong >0 \b, version %ld
+>4 beshort x revision %d.
+>6 beshort >0 \b%d,
+>>8 belong x %d messages,
+>>36 belong x %d sysdep messages
+>6 beshort =0 \b%d,
+>>8 belong x %d messages
+
# GnuPG
# The format is very similar to pgp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/magic/Magdir/linux new/file-5.11/magic/Magdir/linux
--- old/file-5.10/magic/Magdir/linux 2011-05-11 03:32:28.000000000 +0200
+++ new/file-5.11/magic/Magdir/linux 2012-02-07 22:35:03.000000000 +0100
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: linux,v 1.41 2011/04/20 18:57:10 christos Exp $
+# $File: linux,v 1.42 2012/02/07 21:35:03 christos Exp $
# linux: file(1) magic for Linux files
#
# Values for Linux/i386 binaries, from Daniel Quinlan
@@ -182,6 +182,11 @@
&0 string \x80\x00\x20\x00\x00\x00\x00\x00 Z990 32bit kernel
&0 string \x80\x00\x00\x00\x00\x00\x00\x00 Z900 32bit kernel
+# Linux ARM compressed kernel image
+# From: Kevin Cernekee
+36 lelong 0x016f2818 Linux kernel ARM boot executable zImage (little-endian)
+36 belong 0x016f2818 Linux kernel ARM boot executable zImage (big-endian)
+
############################################################################
# Linux 8086 executable
0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/magic/Magdir/palm new/file-5.11/magic/Magdir/palm
--- old/file-5.10/magic/Magdir/palm 2011-12-15 17:21:43.000000000 +0100
+++ new/file-5.11/magic/Magdir/palm 2012-01-16 16:16:43.000000000 +0100
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: palm,v 1.8 2011/12/15 16:21:43 christos Exp $
+# $File: palm,v 1.9 2012/01/16 15:16:43 christos Exp $
# palm: file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks
#
# Brian Lalor
@@ -10,17 +10,17 @@
# What are the possibilities and where is this documented?
# appl
-59 byte \0
->60 string appl PalmOS application
->0 string >\0 "%s"
+#59 byte \0
+#>60 string appl PalmOS application
+#>0 string >\0 "%s"
# TEXt
-59 byte \0
->60 belong TEXt AportisDoc file
->0 string >\0 "%s"
+#59 byte \0
+#>60 belong TEXt AportisDoc file
+#>0 string >\0 "%s"
# HACK
-59 byte \0
->60 string HACK HackMaster hack
->0 string >\0 "%s"
+#59 byte \0
+#>60 string HACK HackMaster hack
+#>0 string >\0 "%s"
# Variety of PalmOS document types
# Michael-John Turner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/magic/Magdir/zfs new/file-5.11/magic/Magdir/zfs
--- old/file-5.10/magic/Magdir/zfs 1970-01-01 01:00:00.000000000 +0100
+++ new/file-5.11/magic/Magdir/zfs 2012-01-27 02:40:35.000000000 +0100
@@ -0,0 +1,96 @@
+#------------------------------------------------------------------------------
+# zfs: file(1) magic for ZFS dumps
+#
+# From
+# ZFS dump header has the following structure (as per zfs_ioctl.h
+# in FreeBSD with drr_type is set to DRR_BEGIN)
+#
+# enum {
+# DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS,
+# DRR_WRITE, DRR_FREE, DRR_END,
+# } drr_type;
+# uint32_t drr_pad;
+# uint64_t drr_magic;
+# uint64_t drr_version;
+# uint64_t drr_creation_time;
+# dmu_objset_type_t drr_type;
+# uint32_t drr_pad;
+# uint64_t drr_toguid;
+# uint64_t drr_fromguid;
+# char drr_toname[MAXNAMELEN];
+#
+# Backup magic is 0x00000002f5bacbac (quad word)
+# The drr_type is defined as
+# typedef enum dmu_objset_type {
+# DMU_OST_NONE,
+# DMU_OST_META,
+# DMU_OST_ZFS,
+# DMU_OST_ZVOL,
+# DMU_OST_OTHER, /* For testing only! */
+# DMU_OST_ANY, /* Be careful! */
+# DMU_OST_NUMTYPES
+# } dmu_objset_type_t;
+#
+# Almost all uint64_t fields are printed as the 32-bit ones (with high
+# 32 bits zeroed), because there is no simple way to print them as the
+# full 64-bit values.
+
+# Big-endian values
+8 string \000\000\000\002\365\272\313\254 ZFS shapshot (big-endian machine),
+>20 belong x version %lu,
+>32 belong 0 type: NONE,
+>32 belong 1 type: META,
+>32 belong 2 type: ZFS,
+>32 belong 3 type: ZVOL,
+>32 belong 4 type: OTHER,
+>32 belong 5 type: ANY,
+>32 belong >5 type: UNKNOWN (%lu),
+>40 byte x destination GUID: %02X
+>41 byte x %02X
+>42 byte x %02X
+>43 byte x %02X
+>44 byte x %02X
+>45 byte x %02X
+>46 byte x %02X
+>47 byte x %02X,
+>48 ulong >0
+>>52 ulong >0
+>>>48 byte x source GUID: %02X
+>>>49 byte x %02X
+>>>50 byte x %02X
+>>>51 byte x %02X
+>>>52 byte x %02X
+>>>53 byte x %02X
+>>>54 byte x %02X
+>>>55 byte x %02X,
+>56 string >\0 name: '%s'
+
+# Little-endian values
+8 string \254\313\272\365\002\000\000\000 ZFS shapshot (little-endian machine),
+>16 lelong x version %lu,
+>32 lelong 0 type: NONE,
+>32 lelong 1 type: META,
+>32 lelong 2 type: ZFS,
+>32 lelong 3 type: ZVOL,
+>32 lelong 4 type: OTHER,
+>32 lelong 5 type: ANY,
+>32 lelong >5 type: UNKNOWN (%lu),
+>47 byte x destination GUID: %02X
+>46 byte x %02X
+>45 byte x %02X
+>44 byte x %02X
+>43 byte x %02X
+>42 byte x %02X
+>41 byte x %02X
+>40 byte x %02X,
+>48 ulong >0
+>>52 ulong >0
+>>>55 byte x source GUID: %02X
+>>>54 byte x %02X
+>>>53 byte x %02X
+>>>52 byte x %02X
+>>>51 byte x %02X
+>>>50 byte x %02X
+>>>49 byte x %02X
+>>>48 byte x %02X,
+>56 string >\0 name: '%s'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/magic/Makefile.am new/file-5.11/magic/Makefile.am
--- old/file-5.10/magic/Makefile.am 2011-12-16 18:44:33.000000000 +0100
+++ new/file-5.11/magic/Makefile.am 2012-01-27 02:41:26.000000000 +0100
@@ -1,5 +1,5 @@
#
-# $File: Makefile.am,v 1.77 2011/12/16 17:44:33 christos Exp $
+# $File: Makefile.am,v 1.78 2012/01/27 01:41:26 christos Exp $
#
MAGIC_FRAGMENT_BASE = Magdir
MAGIC_DIR = $(top_srcdir)/magic
@@ -245,6 +245,7 @@
$(MAGIC_FRAGMENT_DIR)/xilinx \
$(MAGIC_FRAGMENT_DIR)/xo65 \
$(MAGIC_FRAGMENT_DIR)/xwindows \
+$(MAGIC_FRAGMENT_DIR)/zfs \
$(MAGIC_FRAGMENT_DIR)/zilog \
$(MAGIC_FRAGMENT_DIR)/zyxel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/magic/Makefile.in new/file-5.11/magic/Makefile.in
--- old/file-5.10/magic/Makefile.in 2011-12-30 17:49:09.000000000 +0100
+++ new/file-5.11/magic/Makefile.in 2012-02-21 20:17:03.000000000 +0100
@@ -196,7 +196,7 @@
top_srcdir = @top_srcdir@
#
-# $File: Makefile.am,v 1.77 2011/12/16 17:44:33 christos Exp $
+# $File: Makefile.am,v 1.78 2012/01/27 01:41:26 christos Exp $
#
MAGIC_FRAGMENT_BASE = Magdir
MAGIC_DIR = $(top_srcdir)/magic
@@ -440,6 +440,7 @@
$(MAGIC_FRAGMENT_DIR)/xilinx \
$(MAGIC_FRAGMENT_DIR)/xo65 \
$(MAGIC_FRAGMENT_DIR)/xwindows \
+$(MAGIC_FRAGMENT_DIR)/zfs \
$(MAGIC_FRAGMENT_DIR)/zilog \
$(MAGIC_FRAGMENT_DIR)/zyxel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/src/cdf.c new/file-5.11/src/cdf.c
--- old/file-5.10/src/cdf.c 2011-09-16 23:24:22.000000000 +0200
+++ new/file-5.11/src/cdf.c 2012-02-20 23:35:29.000000000 +0100
@@ -35,7 +35,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: cdf.c,v 1.46 2011/09/16 21:23:59 christos Exp $")
+FILE_RCSID("@(#)$File: cdf.c,v 1.50 2012/02/20 22:35:29 christos Exp $")
#endif
#include
@@ -75,6 +75,7 @@
#define CDF_TOLE2(x) ((uint16_t)(NEED_SWAP ? _cdf_tole2(x) : (uint16_t)(x)))
#define CDF_GETUINT32(x, y) cdf_getuint32(x, y)
+
/*
* swap a short
*/
@@ -341,18 +342,27 @@
cdf_read_sector(const cdf_info_t *info, void *buf, size_t offs, size_t len,
const cdf_header_t *h, cdf_secid_t id)
{
- assert((size_t)CDF_SEC_SIZE(h) == len);
- return cdf_read(info, (off_t)CDF_SEC_POS(h, id),
- ((char *)buf) + offs, len);
+ size_t ss = CDF_SEC_SIZE(h);
+ size_t pos = CDF_SEC_POS(h, id);
+ assert(ss == len);
+ return cdf_read(info, (off_t)pos, ((char *)buf) + offs, len);
}
ssize_t
cdf_read_short_sector(const cdf_stream_t *sst, void *buf, size_t offs,
size_t len, const cdf_header_t *h, cdf_secid_t id)
{
- assert((size_t)CDF_SHORT_SEC_SIZE(h) == len);
+ size_t ss = CDF_SHORT_SEC_SIZE(h);
+ size_t pos = CDF_SHORT_SEC_POS(h, id);
+ assert(ss == len);
+ if (pos > CDF_SEC_SIZE(h) * sst->sst_len) {
+ DPRINTF(("Out of bounds read %" SIZE_T_FORMAT "u > %"
+ SIZE_T_FORMAT "u\n",
+ pos, CDF_SEC_SIZE(h) * sst->sst_len));
+ return -1;
+ }
(void)memcpy(((char *)buf) + offs,
- ((const char *)sst->sst_tab) + CDF_SHORT_SEC_POS(h, id), len);
+ ((const char *)sst->sst_tab) + pos, len);
return len;
}
@@ -419,8 +429,8 @@
if (sec < 0)
goto out;
if (i >= sat->sat_len) {
- DPRINTF(("Out of bounds reading MSA %u >= %u",
- i, sat->sat_len));
+ DPRINTF(("Out of bounds reading MSA %" SIZE_T_FORMAT
+ "u >= %" SIZE_T_FORMAT "u", i, sat->sat_len));
errno = EFTYPE;
goto out2;
}
@@ -493,7 +503,8 @@
}
if (i >= scn->sst_len) {
DPRINTF(("Out of bounds reading long sector chain "
- "%u > %u\n", i, scn->sst_len));
+ "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i,
+ scn->sst_len));
errno = EFTYPE;
goto out;
}
@@ -538,7 +549,8 @@
}
if (i >= scn->sst_len) {
DPRINTF(("Out of bounds reading short sector chain "
- "%u > %u\n", i, scn->sst_len));
+ "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n",
+ i, scn->sst_len));
errno = EFTYPE;
goto out;
}
@@ -646,7 +658,8 @@
}
if (i >= ssat->sat_len) {
DPRINTF(("Out of bounds reading short sector chain "
- "%u > %u\n", i, ssat->sat_len));
+ "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i,
+ ssat->sat_len));
errno = EFTYPE;
goto out;
}
@@ -786,17 +799,18 @@
if (cdf_check_stream_offset(sst, h, e, 0, __LINE__) == -1)
goto out;
for (i = 0; i < sh.sh_properties; i++) {
+ size_t ofs = CDF_GETUINT32(p, (i << 1) + 1);
q = (const uint8_t *)(const void *)
- ((const char *)(const void *)p +
- CDF_GETUINT32(p, (i << 1) + 1)) - 2 * sizeof(uint32_t);
+ ((const char *)(const void *)p + ofs
+ - 2 * sizeof(uint32_t));
if (q > e) {
DPRINTF(("Ran of the end %p > %p\n", q, e));
goto out;
}
inp[i].pi_id = CDF_GETUINT32(p, i << 1);
inp[i].pi_type = CDF_GETUINT32(q, 0);
- DPRINTF(("%d) id=%x type=%x offs=%x,%d\n", i, inp[i].pi_id,
- inp[i].pi_type, q - p, CDF_GETUINT32(p, (i << 1) + 1)));
+ DPRINTF(("%" SIZE_T_FORMAT "u) id=%x type=%x offs=0x%tx,0x%x\n",
+ i, inp[i].pi_id, inp[i].pi_type, q - p, offs));
if (inp[i].pi_type & CDF_VECTOR) {
nelements = CDF_GETUINT32(q, 1);
o = 2;
@@ -842,6 +856,20 @@
(void)memcpy(&u64, &q[o4], sizeof(u64));
inp[i].pi_u64 = CDF_TOLE8((uint64_t)u64);
break;
+ case CDF_FLOAT:
+ if (inp[i].pi_type & CDF_VECTOR)
+ goto unknown;
+ (void)memcpy(&u32, &q[o4], sizeof(u32));
+ u32 = CDF_TOLE4(u32);
+ memcpy(&inp[i].pi_f, &u32, sizeof(inp[i].pi_f));
+ break;
+ case CDF_DOUBLE:
+ if (inp[i].pi_type & CDF_VECTOR)
+ goto unknown;
+ (void)memcpy(&u64, &q[o4], sizeof(u64));
+ u64 = CDF_TOLE8((uint64_t)u64);
+ memcpy(&inp[i].pi_d, &u64, sizeof(inp[i].pi_d));
+ break;
case CDF_LENGTH32_STRING:
case CDF_LENGTH32_WSTRING:
if (nelements > 1) {
@@ -857,17 +885,22 @@
*info = inp;
inp = *info + nelem;
}
- DPRINTF(("nelements = %d\n", nelements));
+ DPRINTF(("nelements = %" SIZE_T_FORMAT "u\n",
+ nelements));
for (j = 0; j < nelements; j++, i++) {
uint32_t l = CDF_GETUINT32(q, o);
inp[i].pi_str.s_len = l;
inp[i].pi_str.s_buf = (const char *)
(const void *)(&q[o4 + sizeof(l)]);
- DPRINTF(("l = %d, r = %d, s = %s\n", l,
+ DPRINTF(("l = %d, r = %" SIZE_T_FORMAT
+ "u, s = %s\n", l,
CDF_ROUND(l, sizeof(l)),
inp[i].pi_str.s_buf));
- l = 4 + (uint32_t)CDF_ROUND(l, sizeof(l));
- o += l >> 2;
+ if (l & 1)
+ l++;
+ o += l >> 1;
+ if (q + o >= e)
+ goto out;
o4 = o * sizeof(uint32_t);
}
i--;
@@ -886,7 +919,7 @@
unknown:
DPRINTF(("Don't know how to deal with %x\n",
inp[i].pi_type));
- goto out;
+ break;
}
}
return 0;
@@ -925,8 +958,9 @@
return -1;
}
if (cdf_read_property_info(sst, h, CDF_TOLE4(sd->sd_offset),
- info, count, &maxcount) == -1)
+ info, count, &maxcount) == -1) {
return -1;
+ }
}
return 0;
}
@@ -1051,14 +1085,14 @@
size_t i, j, s = size / sizeof(cdf_secid_t);
for (i = 0; i < sat->sat_len; i++) {
- (void)fprintf(stderr, "%s[%" SIZE_T_FORMAT "u]:\n%.6d: ",
- prefix, i, i * s);
+ (void)fprintf(stderr, "%s[%" SIZE_T_FORMAT "u]:\n%.6"
+ SIZE_T_FORMAT "u: ", prefix, i, i * s);
for (j = 0; j < s; j++) {
(void)fprintf(stderr, "%5d, ",
CDF_TOLE4(sat->sat_tab[s * i + j]));
if ((j + 1) % 10 == 0)
- (void)fprintf(stderr, "\n%.6d: ",
- i * s + j + 1);
+ (void)fprintf(stderr, "\n%.6" SIZE_T_FORMAT
+ "u: ", i * s + j + 1);
}
(void)fprintf(stderr, "\n");
}
@@ -1077,7 +1111,8 @@
if (j == 16) {
j = 0;
abuf[15] = '\0';
- (void)fprintf(stderr, "%s\n%.4x: ", abuf, i + 1);
+ (void)fprintf(stderr, "%s\n%.4" SIZE_T_FORMAT "x: ",
+ abuf, i + 1);
}
}
(void)fprintf(stderr, "\n");
@@ -1175,6 +1210,14 @@
(void)fprintf(stderr, "unsigned 32 [%u]\n",
info[i].pi_u32);
break;
+ case CDF_FLOAT:
+ (void)fprintf(stderr, "float [%g]\n",
+ info[i].pi_f);
+ break;
+ case CDF_DOUBLE:
+ (void)fprintf(stderr, "double [%g]\n",
+ info[i].pi_d);
+ break;
case CDF_LENGTH32_STRING:
(void)fprintf(stderr, "string %u [%.*s]\n",
info[i].pi_str.s_len,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/src/cdf.h new/file-5.11/src/cdf.h
--- old/file-5.10/src/cdf.h 2011-04-07 21:20:30.000000000 +0200
+++ new/file-5.11/src/cdf.h 2012-02-17 06:28:31.000000000 +0100
@@ -51,136 +51,140 @@
#define CDF_SECID_NULL 0
#define CDF_SECID_FREE -1
-#define CDF_SECID_END_OF_CHAIN -2
-#define CDF_SECID_SECTOR_ALLOCATION_TABLE -3
+#define CDF_SECID_END_OF_CHAIN -2
+#define CDF_SECID_SECTOR_ALLOCATION_TABLE -3
#define CDF_SECID_MASTER_SECTOR_ALLOCATION_TABLE -4
typedef struct {
- uint64_t h_magic;
+ uint64_t h_magic;
#define CDF_MAGIC 0xE11AB1A1E011CFD0LL
- uint64_t h_uuid[2];
- uint16_t h_revision;
- uint16_t h_version;
- uint16_t h_byte_order;
- uint16_t h_sec_size_p2;
- uint16_t h_short_sec_size_p2;
- uint8_t h_unused0[10];
- uint32_t h_num_sectors_in_sat;
- uint32_t h_secid_first_directory;
- uint8_t h_unused1[4];
- uint32_t h_min_size_standard_stream;
- cdf_secid_t h_secid_first_sector_in_short_sat;
- uint32_t h_num_sectors_in_short_sat;
- cdf_secid_t h_secid_first_sector_in_master_sat;
- uint32_t h_num_sectors_in_master_sat;
- cdf_secid_t h_master_sat[436/4];
+ uint64_t h_uuid[2];
+ uint16_t h_revision;
+ uint16_t h_version;
+ uint16_t h_byte_order;
+ uint16_t h_sec_size_p2;
+ uint16_t h_short_sec_size_p2;
+ uint8_t h_unused0[10];
+ uint32_t h_num_sectors_in_sat;
+ uint32_t h_secid_first_directory;
+ uint8_t h_unused1[4];
+ uint32_t h_min_size_standard_stream;
+ cdf_secid_t h_secid_first_sector_in_short_sat;
+ uint32_t h_num_sectors_in_short_sat;
+ cdf_secid_t h_secid_first_sector_in_master_sat;
+ uint32_t h_num_sectors_in_master_sat;
+ cdf_secid_t h_master_sat[436/4];
} cdf_header_t;
-#define CDF_SEC_SIZE(h) (1 << (h)->h_sec_size_p2)
+#define CDF_SEC_SIZE(h) ((size_t)(1 << (h)->h_sec_size_p2))
#define CDF_SEC_POS(h, secid) (CDF_SEC_SIZE(h) + (secid) * CDF_SEC_SIZE(h))
-#define CDF_SHORT_SEC_SIZE(h) (1 << (h)->h_short_sec_size_p2)
+#define CDF_SHORT_SEC_SIZE(h) ((size_t)(1 << (h)->h_short_sec_size_p2))
#define CDF_SHORT_SEC_POS(h, secid) ((secid) * CDF_SHORT_SEC_SIZE(h))
-typedef int32_t cdf_dirid_t;
+typedef int32_t cdf_dirid_t;
#define CDF_DIRID_NULL -1
-typedef int64_t cdf_timestamp_t;
+typedef int64_t cdf_timestamp_t;
#define CDF_BASE_YEAR 1601
#define CDF_TIME_PREC 10000000
typedef struct {
- uint16_t d_name[32];
- uint16_t d_namelen;
- uint8_t d_type;
+ uint16_t d_name[32];
+ uint16_t d_namelen;
+ uint8_t d_type;
#define CDF_DIR_TYPE_EMPTY 0
-#define CDF_DIR_TYPE_USER_STORAGE 1
-#define CDF_DIR_TYPE_USER_STREAM 2
-#define CDF_DIR_TYPE_LOCKBYTES 3
-#define CDF_DIR_TYPE_PROPERTY 4
-#define CDF_DIR_TYPE_ROOT_STORAGE 5
- uint8_t d_color;
+#define CDF_DIR_TYPE_USER_STORAGE 1
+#define CDF_DIR_TYPE_USER_STREAM 2
+#define CDF_DIR_TYPE_LOCKBYTES 3
+#define CDF_DIR_TYPE_PROPERTY 4
+#define CDF_DIR_TYPE_ROOT_STORAGE 5
+ uint8_t d_color;
#define CDF_DIR_COLOR_READ 0
#define CDF_DIR_COLOR_BLACK 1
- cdf_dirid_t d_left_child;
- cdf_dirid_t d_right_child;
- cdf_dirid_t d_storage;
- uint64_t d_storage_uuid[2];
- uint32_t d_flags;
- cdf_timestamp_t d_created;
- cdf_timestamp_t d_modified;
- cdf_secid_t d_stream_first_sector;
- uint32_t d_size;
- uint32_t d_unused0;
+ cdf_dirid_t d_left_child;
+ cdf_dirid_t d_right_child;
+ cdf_dirid_t d_storage;
+ uint64_t d_storage_uuid[2];
+ uint32_t d_flags;
+ cdf_timestamp_t d_created;
+ cdf_timestamp_t d_modified;
+ cdf_secid_t d_stream_first_sector;
+ uint32_t d_size;
+ uint32_t d_unused0;
} cdf_directory_t;
#define CDF_DIRECTORY_SIZE 128
typedef struct {
- cdf_secid_t *sat_tab;
- size_t sat_len;
+ cdf_secid_t *sat_tab;
+ size_t sat_len;
} cdf_sat_t;
typedef struct {
- cdf_directory_t *dir_tab;
- size_t dir_len;
+ cdf_directory_t *dir_tab;
+ size_t dir_len;
} cdf_dir_t;
typedef struct {
- void *sst_tab;
- size_t sst_len;
- size_t sst_dirlen;
+ void *sst_tab;
+ size_t sst_len;
+ size_t sst_dirlen;
} cdf_stream_t;
typedef struct {
- uint32_t cl_dword;
- uint16_t cl_word[2];
- uint8_t cl_two[2];
- uint8_t cl_six[6];
+ uint32_t cl_dword;
+ uint16_t cl_word[2];
+ uint8_t cl_two[2];
+ uint8_t cl_six[6];
} cdf_classid_t;
typedef struct {
- uint16_t si_byte_order;
- uint16_t si_zero;
- uint16_t si_os_version;
- uint16_t si_os;
- cdf_classid_t si_class;
- uint32_t si_count;
+ uint16_t si_byte_order;
+ uint16_t si_zero;
+ uint16_t si_os_version;
+ uint16_t si_os;
+ cdf_classid_t si_class;
+ uint32_t si_count;
} cdf_summary_info_header_t;
#define CDF_SECTION_DECLARATION_OFFSET 0x1c
typedef struct {
- cdf_classid_t sd_class;
- uint32_t sd_offset;
+ cdf_classid_t sd_class;
+ uint32_t sd_offset;
} cdf_section_declaration_t;
typedef struct {
- uint32_t sh_len;
- uint32_t sh_properties;
+ uint32_t sh_len;
+ uint32_t sh_properties;
} cdf_section_header_t;
typedef struct {
- uint32_t pi_id;
- uint32_t pi_type;
- union {
- uint16_t _pi_u16;
- int16_t _pi_s16;
- uint32_t _pi_u32;
- int32_t _pi_s32;
- uint64_t _pi_u64;
- int64_t _pi_s64;
- cdf_timestamp_t _pi_tp;
- struct {
- uint32_t s_len;
- const char *s_buf;
- } _pi_str;
- } pi_val;
+ uint32_t pi_id;
+ uint32_t pi_type;
+ union {
+ uint16_t _pi_u16;
+ int16_t _pi_s16;
+ uint32_t _pi_u32;
+ int32_t _pi_s32;
+ uint64_t _pi_u64;
+ int64_t _pi_s64;
+ cdf_timestamp_t _pi_tp;
+ float _pi_f;
+ double _pi_d;
+ struct {
+ uint32_t s_len;
+ const char *s_buf;
+ } _pi_str;
+ } pi_val;
#define pi_u64 pi_val._pi_u64
#define pi_s64 pi_val._pi_s64
#define pi_u32 pi_val._pi_u32
#define pi_s32 pi_val._pi_s32
#define pi_u16 pi_val._pi_u16
#define pi_s16 pi_val._pi_s16
+#define pi_f pi_val._pi_f
+#define pi_d pi_val._pi_d
#define pi_tp pi_val._pi_tp
#define pi_str pi_val._pi_str
} cdf_property_info_t;
@@ -189,13 +193,13 @@
/* Variant type definitions */
#define CDF_EMPTY 0x00000000
-#define CDF_NULL 0x00000001
+#define CDF_NULL 0x00000001
#define CDF_SIGNED16 0x00000002
#define CDF_SIGNED32 0x00000003
#define CDF_FLOAT 0x00000004
#define CDF_DOUBLE 0x00000005
#define CDF_CY 0x00000006
-#define CDF_DATE 0x00000007
+#define CDF_DATE 0x00000007
#define CDF_BSTR 0x00000008
#define CDF_DISPATCH 0x00000009
#define CDF_ERROR 0x0000000a
@@ -206,7 +210,7 @@
#define CDF_SIGNED8 0x00000010
#define CDF_UNSIGNED8 0x00000011
#define CDF_UNSIGNED16 0x00000012
-#define CDF_UNSIGNED32 0x00000013
+#define CDF_UNSIGNED32 0x00000013
#define CDF_SIGNED64 0x00000014
#define CDF_UNSIGNED64 0x00000015
#define CDF_INT 0x00000016
@@ -241,7 +245,7 @@
#define CDF_PROPERTY_SUBJECT 0x00000003
#define CDF_PROPERTY_AUTHOR 0x00000004
#define CDF_PROPERTY_KEYWORDS 0x00000005
-#define CDF_PROPERTY_COMMENTS 0x00000006
+#define CDF_PROPERTY_COMMENTS 0x00000006
#define CDF_PROPERTY_TEMPLATE 0x00000007
#define CDF_PROPERTY_LAST_SAVED_BY 0x00000008
#define CDF_PROPERTY_REVISION_NUMBER 0x00000009
@@ -258,9 +262,9 @@
#define CDF_PROPERTY_LOCALE_ID 0x80000000
typedef struct {
- int i_fd;
- const unsigned char *i_buf;
- size_t i_len;
+ int i_fd;
+ const unsigned char *i_buf;
+ size_t i_len;
} cdf_info_t;
struct timespec;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/src/encoding.c new/file-5.11/src/encoding.c
--- old/file-5.10/src/encoding.c 2011-12-17 18:17:18.000000000 +0100
+++ new/file-5.11/src/encoding.c 2012-01-24 20:02:02.000000000 +0100
@@ -35,7 +35,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: encoding.c,v 1.6 2011/12/08 12:38:24 rrt Exp $")
+FILE_RCSID("@(#)$File: encoding.c,v 1.7 2012/01/24 19:02:02 christos Exp $")
#endif /* lint */
#include "magic.h"
@@ -71,6 +71,7 @@
int rv = 1, ucs_type;
unsigned char *nbuf = NULL;
+ *type = "text";
mlen = (nbytes + 1) * sizeof(nbuf[0]);
if ((nbuf = CAST(unsigned char *, calloc((size_t)1, mlen))) == NULL) {
file_oomem(ms, mlen);
@@ -82,7 +83,6 @@
goto done;
}
- *type = "text";
if (looks_ascii(buf, nbytes, *ubuf, ulen)) {
DPRINTF(("ascii %" SIZE_T_FORMAT "u\n", *ulen));
*code = "ASCII";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/file-5.10/src/readcdf.c new/file-5.11/src/readcdf.c
--- old/file-5.10/src/readcdf.c 2011-09-28 15:30:10.000000000 +0200
+++ new/file-5.11/src/readcdf.c 2012-02-20 21:04:58.000000000 +0100
@@ -26,7 +26,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: readcdf.c,v 1.27 2011/09/28 13:30:10 christos Exp $")
+FILE_RCSID("@(#)$File: readcdf.c,v 1.29 2012/02/20 20:04:58 christos Exp $")
#endif
#include
@@ -72,6 +72,16 @@
info[i].pi_u32) == -1)
return -1;
break;
+ case CDF_FLOAT:
+ if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf,
+ info[i].pi_f) == -1)
+ return -1;
+ break;
+ case CDF_DOUBLE:
+ if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf,
+ info[i].pi_d) == -1)
+ return -1;
+ break;
case CDF_LENGTH32_STRING:
case CDF_LENGTH32_WSTRING:
len = info[i].pi_str.s_len;
@@ -163,30 +173,31 @@
return -1;
if (NOTMIME(ms)) {
- if (file_printf(ms, "Composite Document File V2 Document") == -1)
+ if (file_printf(ms, "Composite Document File V2 Document")
+ == -1)
return -1;
if (file_printf(ms, ", %s Endian",
si.si_byte_order == 0xfffe ? "Little" : "Big") == -1)
- return -1;
+ return -2;
switch (si.si_os) {
case 2:
if (file_printf(ms, ", Os: Windows, Version %d.%d",
si.si_os_version & 0xff,
(uint32_t)si.si_os_version >> 8) == -1)
- return -1;
+ return -2;
break;
case 1:
if (file_printf(ms, ", Os: MacOS, Version %d.%d",
(uint32_t)si.si_os_version >> 8,
si.si_os_version & 0xff) == -1)
- return -1;
+ return -2;
break;
default:
if (file_printf(ms, ", Os %d, Version: %d.%d", si.si_os,
si.si_os_version & 0xff,
(uint32_t)si.si_os_version >> 8) == -1)
- return -1;
+ return -2;
break;
}
}
@@ -194,7 +205,7 @@
m = cdf_file_property_info(ms, info, count);
free(info);
- return m;
+ return m == -1 ? -2 : m;
}
protected int
@@ -263,7 +274,7 @@
#ifdef CDF_DEBUG
cdf_dump_summary_info(&h, &scn);
#endif
- if ((i = cdf_file_summary_info(ms, &h, &scn)) == -1)
+ if ((i = cdf_file_summary_info(ms, &h, &scn)) < 0)
expn = "Can't expand summary_info";
if (i == 0) {
const char *str = "vnd.ms-office";
@@ -294,9 +305,10 @@
free(sat.sat_tab);
out0:
if (i != 1) {
- if (file_printf(ms, "Composite Document File V2 Document")
- == -1)
- return -1;
+ if (i == -1)
+ if (file_printf(ms, "Composite Document File V2 Document")
+ == -1)
+ return -1;
if (*expn)
if (file_printf(ms, ", %s%s", corrupt, expn) == -1)
return -1;
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org