[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[SCM] Debian package checker branch, master, updated. 2.4.1-8-g2d8538b



The following commit has been merged in the master branch:
commit ee5a72d4dc54074301da2a0ae9512a66212302eb
Author: Raphael Geissert <atomo64@gmail.com>
Date:   Sat May 8 22:36:52 2010 -0500

    Correctly handle ELF binaries with whitespaces in their name
    
    Rewrite the 'strings' collection script in Perl to make it more robust.
    
    * collection/strings:
      + [RG] Correctly handle ELF binaries with whitespaces in their name.
        (LP: #540342)
    * lib/Lintian/Collect/Binary.pm:
      + [RG] Correctly handle ELF binaries with whitespaces in their name.

diff --git a/collection/strings b/collection/strings
index eac96ca..5a6a906 100755
--- a/collection/strings
+++ b/collection/strings
@@ -1,7 +1,7 @@
-#!/bin/sh -e
+#!/usr/bin/perl -w
 # strings -- lintian collection script
 
-# Copyright (C) 2009 Raphael Geissert <atomo64@gmail.com>
+# Copyright (C) 2009, 2010 Raphael Geissert <atomo64@gmail.com>
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -19,22 +19,44 @@
 # Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
 # MA 02110-1301, USA.
 
-[ $# -eq 2 ] || {
-    echo "Syntax: strings <pkg> <type>"
-    exit 1
+use strict;
+use warnings;
+
+use lib "$ENV{'LINTIAN_ROOT'}/lib";
+use Util;
+use Lintian::Command qw(spawn);
+use Lintian::Command::Simple;
+
+($#ARGV == 1) or fail("syntax: strings <pkg> <type>");
+
+-f "file-info"
+    or fail("file-info invoked in wrong directory");
+
+unlink("elf-index");
+delete_dir("strings");
+
+open(ELF_INDEX, '>', 'elf-index')
+    or fail("Could not open 'elf-index' for writing: $!\n");
+
+open(FILE_INFO, '<', 'file-info')
+    or fail("Could not open 'file-info' for reading: $!\n");
+
+while (<FILE_INFO>) {
+    next unless(m/^(.+?)\x00\s+[^,]*\bELF\b/);
+    my $bin = $1;
+
+    print ELF_INDEX "$bin\n";
+
+    next if ($bin =~ m,^/usr/lib/debug/,);
+
+    my $dir = $bin;
+    $dir =~ s,/[^/]+?$,,;
+
+    Lintian::Command::Simple::run('mkdir', '-p', "strings/$dir") == 0
+	or fail("Failed to create directory 'strings/$dir'\n");
+
+    spawn({out => "strings/$bin", fail => 'error'}, ['strings', "unpacked/$bin"]);
 }
 
-[ ! -f elf-index ] || rm -f elf-index
-exec >elf-index
-
-for bin in $(sed -rn 's/\x00\s+[^,]*\bELF\b.+$//g;T;p' file-info); do
-    echo "$bin"
-    case $bin in
-      /usr/lib/debug/*)
-        ;;
-      *)
-        mkdir -p "strings/$(dirname "$bin")"
-        strings "unpacked/$bin" > "strings/$bin"
-        ;;
-    esac
-done
+close(ELF_INDEX);
+close(FILE_INFO);
diff --git a/debian/changelog b/debian/changelog
index 6a9df92..9be2f64 100755
--- a/debian/changelog
+++ b/debian/changelog
@@ -18,6 +18,10 @@ lintian (2.4.2) UNRELEASED; urgency=low
     + [RA] Fix typo in long description of duplicated-key-in-desktop-entry.
       Thanks, Niels Thykier.  (Closes: #580700)
 
+  * collection/strings:
+    + [RG] Correctly handle ELF binaries with whitespaces in their name.
+      (LP: #540342)
+
   * data/fields/virtual-packages:
     + [RA] Update to current unstable and add the old xserver-xorg video
       and input virtual packages.
@@ -28,6 +32,8 @@ lintian (2.4.2) UNRELEASED; urgency=low
     + [RA] Set a PATH of /bin:/usr/bin if PATH is completely unset.
       Thanks, Carsten Hey.
 
+  * lib/Lintian/Collect/Binary.pm:
+    + [RG] Correctly handle ELF binaries with whitespaces in their name.
   * lib/Lintian/Relation.pm:
     + [RA] Rather than allowing only a package name or a substvar, allow
       substvars mixed into the package name.  (Closes: #580494)
diff --git a/lib/Lintian/Collect/Binary.pm b/lib/Lintian/Collect/Binary.pm
index 91b7b70..6b6feeb 100644
--- a/lib/Lintian/Collect/Binary.pm
+++ b/lib/Lintian/Collect/Binary.pm
@@ -192,7 +192,7 @@ sub objdump_info {
 
         next if m/^\s*$/o;
 
-        if (m,^-- \./(\S+)\s*$,o) {
+        if (m,^-- \./(.+)$,) {
             if ($file) {
                 $objdump_info{$file->{name}} = $file;
             }
diff --git a/t/tests/strings-elf-detection/debian/debian/rules b/t/tests/strings-elf-detection/debian/debian/rules
index 0bc7778..c3c9f8a 100755
--- a/t/tests/strings-elf-detection/debian/debian/rules
+++ b/t/tests/strings-elf-detection/debian/debian/rules
@@ -1,10 +1,13 @@
 #!/usr/bin/make -f
+pkg=strings-elf-detection
 %:
 	dh $@
 binary:
 	dh --before dh_install binary
 	cp /bin/true .
 	touch foo bar::ELF
+	mkdir -p debian/$(pkg)/usr/lib/foo
+	cp /bin/true debian/$(pkg)/usr/lib/foo/true\ false
 	dh --remaining binary
 
 clean:

-- 
Debian package checker


Reply to: