Package: mkvtoolnix
Version: 1.6.5-4
Severity: normal
Tags: patch

Hi,

This patch gets mkvtoolnix to use libmagic instead of (unreliable) filename
extension checks.

-- System Information:
Debian Release: testing/unstable
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.15-1-amd64-k8
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ANSI_X3.4-1968) (ignored: LC_ALL 
set to C)

Versions of packages mkvtoolnix depends on:
ii  libbz2-1.0                    1.0.3-2    high-quality block-sorting file co
ii  libc6                         2.3.6-3    GNU C Library: Shared libraries an
ii  libexpat1                     1.95.8-3   XML parsing C library - runtime li
ii  libflac7                      1.1.2-3.1  Free Lossless Audio Codec - runtim
ii  libgcc1                       1:4.0.3-1  GCC support library
ii  liblzo1                       1.08-3     data compression library (old vers
ii  libmagic1                     4.15-2     File type determination library us
ii  libogg0                       1.1.3-2    Ogg Bitstream Library
ii  libstdc++6                    4.0.3-1    The GNU Standard C++ Library v3
ii  libvorbis0a                   1.1.2-1    The Vorbis General Audio Compressi
ii  zlib1g                        1:1.2.3-11 compression library - runtime

Versions of packages mkvtoolnix recommends:
pn  mkvtoolnix-gui                <none>     (no description available)

-- no debconf information
diff -x config.h.in -x configure -ur mkvtoolnix-1.6.5.old/Makefile.in mkvtoolnix-1.6.5/Makefile.in
--- mkvtoolnix-1.6.5.old/Makefile.in	2005-09-08 19:32:08.000000000 +0200
+++ mkvtoolnix-1.6.5/Makefile.in	2006-03-29 11:03:16.000000000 +0200
@@ -67,6 +67,7 @@
 FLAC_LIBS = @FLAC_LIBS@
 ICONV_LIBS = @ICONV_LIBS@
 LZO_LIBS = @LZO_LIBS@
+MAGIC_LIBS = @MAGIC_LIBS@
 MATROSKA_CFLAGS = @MATROSKA_CFLAGS@
 MATROSKA_LIBS = @MATROSKA_LIBS@
 MINGW_GUIAPP = @MINGW_GUIAPP@
@@ -383,7 +384,7 @@
 		$(DEP_COMP) $(DEP_INPUT) $(DEP_OUTPUT) $(DEP_AVI) $(DEP_RMFF) \
 		$(DEP_MPEGPARSER)
 mkvmerge_LDADD = -lmtxinput -lmtxoutput \
-		-lmtxcommon -lmatroska -lebml \
+		-lmtxcommon $(MAGIC_LIBS) -lmatroska -lebml \
 		-lavi -lrmff -lmpegparser \
 		$(FLAC_LIBS) -lvorbis -logg -lz $(COMPRESSION_LIBRARIES) \
 		-lexpat $(ICONV_LIBS) $(LIBINTL_LIBS) $(LIBRPCRT)
@@ -395,7 +396,7 @@
 mkvinfo_SOURCES = $(wildcard src/info/*.cpp)
 mkvinfo_OBJECTS := $(patsubst %.cpp,%.o,$(mkvinfo_SOURCES))
 mkvinfo_DEPENDENCIES += $(DEP_COMMON)
-mkvinfo_LDADD = -lmtxcommon -lmatroska -lebml \
+mkvinfo_LDADD = -lmtxcommon $(MAGIC_LIBS) -lmatroska -lebml \
 		$(WXWINDOWS_LIBS) \
 		-lexpat $(ICONV_LIBS) $(LIBINTL_LIBS) $(LIBRPCRT)
 
@@ -406,7 +407,7 @@
 mkvextract_SOURCES = $(wildcard src/extract/*.cpp)
 mkvextract_OBJECTS := $(patsubst %.cpp,%.o,$(mkvextract_SOURCES))
 mkvextract_DEPENDENCIES += $(DEP_COMMON) $(DEP_AVILIB) $(DEP_RMFF)
-mkvextract_LDADD = -lmtxcommon -lvorbis -logg -lavi -lmatroska -lebml -lrmff \
+mkvextract_LDADD = -lmtxcommon $(MAGIC_LIBS) -lvorbis -logg -lavi -lmatroska -lebml -lrmff \
 		$(ICONV_LIBS) $(LIBINTL_LIBS) -lexpat \
 		-lz $(COMPRESSION_LIBRARIES) $(LIBRPCRT)
 
@@ -417,7 +418,7 @@
 base64tool_SOURCES = src/base64tool.cpp
 base64tool_OBJECTS := $(patsubst %.cpp,%.o,$(base64tool_SOURCES))
 base64tool_DEPENDENCIES += $(DEP_COMMON)
-base64tool_LDADD = -lmtxcommon -lexpat $(ICONV_LIBS) $(LIBINTL_LIBS) \
+base64tool_LDADD = -lmtxcommon $(MAGIC_LIBS) -lexpat $(ICONV_LIBS) $(LIBINTL_LIBS) \
 		$(LIBRPCRT)
 
 #
@@ -428,7 +429,7 @@
 mmg_OBJECTS := $(patsubst %.cpp,%.o,$(mmg_SOURCES)) \
 		$(patsubst %.rc,%.o,$(MMG_RESOURCES))
 mmg_DEPENDENCIES += $(DEP_COMMON)
-mmg_LDADD = -lmtxcommon -lmatroska -lebml -lexpat $(ICONV_LIBS) \
+mmg_LDADD = -lmtxcommon $(MAGIC_LIBS) -lmatroska -lebml -lexpat $(ICONV_LIBS) \
 		$(WXWINDOWS_LIBS) $(LIBINTL_LIBS) $(MINGW_GUIAPP) \
 		$(LIBRPCRT)
 
diff -x config.h.in -x configure -ur mkvtoolnix-1.6.5.old/configure.in mkvtoolnix-1.6.5/configure.in
--- mkvtoolnix-1.6.5.old/configure.in	2005-12-07 18:22:29.000000000 +0100
+++ mkvtoolnix-1.6.5/configure.in	2006-03-29 12:20:32.000000000 +0200
@@ -983,6 +983,13 @@
 AC_SUBST(TRANSLATIONS_POS)
 AC_SUBST(TRANSLATIONS)
 
+dnl
+dnl Check for libmagic
+dnl
+AC_CHECK_LIB(magic, magic_open, [ MAGIC_LIBS="-lmagic" ])
+AC_CHECK_HEADERS([magic.h])
+AC_SUBST(MAGIC_LIBS)
+
 CFLAGS="$USER_CPPFLAGS @EXTRA_CFLAGS@ @OPTIMIZATION_CFLAGS@ $USER_CFLAGS -Wall -Wno-sign-compare -Wno-comment -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 @EXTRA_CFLAGS@ @DEBUG_CFLAGS@ @PROFILING_CFLAGS@ @MATROSKA_CFLAGS@ @EBML_CFLAGS@"
 CXXFLAGS="$USER_CPPFLAGS @EXTRA_CFLAGS@ @OPTIMIZATION_CFLAGS@ $USER_CXXFLAGS -Wall -Wno-sign-compare -Wno-comment -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 @EXTRA_CFLAGS@ @DEBUG_CFLAGS@ @PROFILING_CFLAGS@ @MATROSKA_CFLAGS@ @EBML_CFLAGS@ @WXWINDOWS_CFLAGS@"
 LDFLAGS="$USER_LDFLAGS @EXTRA_LDFLAGS@ @PROFILING_LIBS@"
diff -x config.h.in -x configure -ur mkvtoolnix-1.6.5.old/debian/control mkvtoolnix-1.6.5/debian/control
--- mkvtoolnix-1.6.5.old/debian/control	2006-03-29 09:52:00.000000000 +0200
+++ mkvtoolnix-1.6.5/debian/control	2006-03-29 09:58:19.000000000 +0200
@@ -2,7 +2,7 @@
 Section: graphics
 Priority: optional
 Maintainer: Clément Stenac <[EMAIL PROTECTED]>
-Build-Depends: debhelper (>= 4.0.0) , libogg-dev, libvorbis-dev, zlib1g-dev, libwxgtk2.6-dev|libwxgtk2.4-dev, libflac-dev, libexpat1-dev, libbz2-dev, liblzo-dev, libebml-dev (>= 0.7.5), libmatroska-dev (>= 0.7.7), dpatch
+Build-Depends: debhelper (>= 4.0.0) , libogg-dev, libvorbis-dev, zlib1g-dev, libwxgtk2.6-dev|libwxgtk2.4-dev, libflac-dev, libexpat1-dev, libbz2-dev, liblzo-dev, libebml-dev (>= 0.7.5), libmatroska-dev (>= 0.7.7), dpatch, libmagic-dev
 Standards-Version: 3.6.2
 
 Package: mkvtoolnix
diff -x config.h.in -x configure -ur mkvtoolnix-1.6.5.old/src/common/extern_data.cpp mkvtoolnix-1.6.5/src/common/extern_data.cpp
--- mkvtoolnix-1.6.5.old/src/common/extern_data.cpp	2005-12-05 17:31:01.000000000 +0100
+++ mkvtoolnix-1.6.5/src/common/extern_data.cpp	2006-03-29 12:22:33.000000000 +0200
@@ -17,6 +17,10 @@
 #include "common.h"
 #include "extern_data.h"
 
+#if HAVE_MAGIC_H
+#include <magic.h>
+#endif
+
 #ifndef NULL
 # define NULL 0
 #endif
@@ -2602,9 +2606,31 @@
 
 string
 guess_mime_type(string ext) {
+#if HAVE_MAGIC_H
+  const char *ret;
+  magic_t m;
+
+  m = magic_open (MAGIC_MIME);
+  magic_load (m, NULL);
+  ret = magic_file (m, ext.c_str());
+  magic_close (m);
+
+  if (ret == NULL)
+    return "";
+  else
+    return ret;
+#else
   vector<string> extensions;
   int i, j;
 
+  /* chop off basename */
+  i = ext.rfind('.');
+  if (i < 0)
+    mxerror(_("No MIME type has been set for the attachment '%s', and "
+              "the file name contains no extension. Therefore the MIME "
+              "type could not be guessed automatically.\n"),
+            ext.c_str());
+  ext.erase(0, i + 1);
   ext = downcase(ext);
 
   for (i = 0; NULL != mime_types[i].name; i++) {
@@ -2618,6 +2644,7 @@
   }
 
   return "";
+#endif
 }
 
 bool
diff -x config.h.in -x configure -ur mkvtoolnix-1.6.5.old/src/input/r_ssa.cpp mkvtoolnix-1.6.5/src/input/r_ssa.cpp
--- mkvtoolnix-1.6.5.old/src/input/r_ssa.cpp	2005-10-12 18:41:09.000000000 +0200
+++ mkvtoolnix-1.6.5/src/input/r_ssa.cpp	2006-03-29 12:01:15.000000000 +0200
@@ -348,11 +348,7 @@
 
   attachment.data = counted_ptr<buffer_t>(buffer);
 
-  pos = name.rfind('.');
-  if (0 < pos) {
-    name.erase(0, pos + 1);
-    attachment.mime_type = guess_mime_type(name);
-  }
+  attachment.mime_type = guess_mime_type(name);
   if (attachment.mime_type == "")
     attachment.mime_type = "application/octet-stream";
 
diff -x config.h.in -x configure -ur mkvtoolnix-1.6.5.old/src/merge/mkvmerge.cpp mkvtoolnix-1.6.5/src/merge/mkvmerge.cpp
--- mkvtoolnix-1.6.5.old/src/merge/mkvmerge.cpp	2005-12-06 17:17:01.000000000 +0100
+++ mkvtoolnix-1.6.5/src/merge/mkvmerge.cpp	2006-03-29 12:01:47.000000000 +0200
@@ -1237,15 +1237,6 @@
 static string
 guess_mime_type_and_report(string file_name) {
   string mime_type;
-  int i;
-
-  i = file_name.rfind('.');
-  if (i < 0)
-    mxerror(_("No MIME type has been set for the attachment '%s', and "
-              "the file name contains no extension. Therefore the MIME "
-              "type could not be guessed automatically.\n"),
-            file_name.c_str());
-  file_name.erase(0, i + 1);
 
   mime_type = guess_mime_type(file_name);
   if (mime_type != "") {
@@ -1255,7 +1246,7 @@
   }
 
   mxerror(_("No MIME type has been set for the attachment '%s', and "
-            "it could not be guessed based on its extension.\n"),
+            "it could not be guessed.\n"),
           file_name.c_str());
   return "";
 }
diff -x config.h.in -x configure -ur mkvtoolnix-1.6.5.old/src/mmg/tab_attachments.cpp mkvtoolnix-1.6.5/src/mmg/tab_attachments.cpp
--- mkvtoolnix-1.6.5.old/src/mmg/tab_attachments.cpp	2005-11-04 09:58:57.000000000 +0100
+++ mkvtoolnix-1.6.5/src/mmg/tab_attachments.cpp	2006-03-29 12:02:52.000000000 +0200
@@ -175,7 +175,7 @@
   name += wxString(wxT(" (")) + file_name.BeforeLast(wxT(PSEP)) + wxT(")");
   lb_attachments->Append(name);
   if (ext.Length() > 0)
-    attch.mime_type = wxU(guess_mime_type(wxMB(ext)).c_str());
+    attch.mime_type = wxU(guess_mime_type(wxMB(file_name)).c_str());
   attch.style = 0;
   attch.stored_name = derive_stored_name_from_file_name(attch.file_name);
 

Reply via email to