lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20201002144936.GA17987@Gentoo>
Date:   Fri, 2 Oct 2020 20:19:36 +0530
From:   Bhaskar Chowdhury <unixbhaskar@...il.com>
To:     Joe Perches <joe@...ches.com>
Cc:     Andrew Morton <akpm@...ux-foundation.org>,
        Andy Whitcroft <apw@...onical.com>,
        LKML <linux-kernel@...r.kernel.org>,
        "kernel-mentors@...enic.com" <kernel-mentors@...enic.com>,
        kernelnewbies <kernelnewbies@...nelnewbies.org>
Subject: Re: external tool to remove embedded filenames

On 11:47 Thu 01 Oct 2020, Joe Perches wrote:
>It's rather unnecessary for files to contain their
>path/filename in source code comments.
>
>Here's a trivial little script that can remove
>embedded filenames in c90 style comments from files.
>
>This requires git.
>
>It does the following types of removals:
>
>remove individual lines like /* filename */ completely
>remove filename from /* filename -- comment */, leave /* comment */
>remove filename and any trailing ' *\n' from /* filename, leave /*
>remove filename from /* filename, leave /*
>remove filename from continuation ' * filename -- comment' leave ' * comment'
>remove filename and any trailing ' *\n' from continuation ' * filename\n *\n'
>
>It seems to work well enough.
>
>It does not handle c99 comments.
>No // filename variants are removed.
>
>Running it on today's -next gives:
>
>$ perl remove_embedded_filenames.pl
>$ git diff --shortstat
> 2310 files changed, 354 insertions(+), 4239 deletions(-)
>
>It's also possible to give any filename or path
>as an argument to the script
>
>For instance:
>
>$ perl remove_embedded_filenames.pl drivers/net
>

>#!/usr/bin/perl -w
>
># script to remove * <filename> comments;
># use: perl remove_embedded_filenames.pl <paths|files>
># e.g.: perl remove_embedded_filenames.pl drivers/net/ethernet/intel
>
>use strict;
>
>my $P = $0;
>my $modified = 0;
>my $quiet = 0;
>
>sub expand_tabs {
>    my ($str) = @_;
>
>    my $res = '';
>    my $n = 0;
>    for my $c (split(//, $str)) {
>	if ($c eq "\t") {
>	    $res .= ' ';
>	    $n++;
>	    for (; ($n % 8) != 0; $n++) {
>		$res .= ' ';
>	    }
>	    next;
>	}
>	$res .= $c;
>	$n++;
>    }
>
>    return $res;
>}
>
>my $args = join(" ", @ARGV);
>my $output = `git ls-files -- $args`;
>my @files = split("\n", $output);
>
>foreach my $file (@files) {
>    my $f;
>    my $cvt = 0;
>    my $text;
>
># read the file
>
>    next if ((-d $file));
>
>    open($f, '<', $file)
>	or die "$P: Can't open $file for read\n";
>    $text = do { local($/) ; <$f> };
>    close($f);
>
>    next if ($text eq "");
>
># Remove the embedded filenames
>
>    # remove individual lines like /* filename */ completely
>    $cvt += $text =~ s@/\*[ \t]+(?:linux\/)?\Q$file\E[ \t]*\*/[ \t]*\n@@g;
>    pos($text) = 0;
>    # remove filenamee from /* filename -- comment */, leave /* comment */
>    $cvt += $text =~ s@/\*([ \t]+)(?:linux\/)?\Q$file\E[ \t]*[:-]+[ \t]*@...1@g;
>    pos($text) = 0;
>    # remove filename and any trailing ' *\n' from /* filename, leave /*
>    $cvt += $text =~ s@/\*([ \t]+)(?:linux\/)?\Q$file\E[ \t]*\n([ \t]*\*[ \t]*\n)*(?:[ \t]*\*)?@/*@g;
>    pos($text) = 0;
>    # remove filename from /* filename, leave /*
>    $cvt += $text =~ s@/\*([ \t]+)(?:linux\/)?\Q$file\E[ \t]*\n@/*@g;
>    pos($text) = 0;
>    # remove filename from continuation ' * filename -- comment'
>    # leave ' * comment'
>    $cvt += $text =~ s/([ \t]+)\*([ \t]*)(?:linux\/)?\Q$file\E[ \t]*[:-]+[ \t]*/$1*$2/g;
>    pos($text) = 0;
>    # remove filename and any trailing ' *\n' from
>    # continuation ' * filename\n *\n'
>    $cvt += $text =~ s/([ \t]*)\*([ \t]*)(?:linux\/)?\Q$file\E[ \t]*\n([ \t]*\*[ \t]*\n)*//g;
>    pos($text) = 0;
>
># write the file if something was changed
>
>    if ($cvt > 0) {
>	$modified = 1;
>	print("$file\n");
>	open($f, '>', $file)
>	    or die "$P: Can't open $file for write\n";
>	print $f $text;
>	close($f);
>    }
>}
>
>if ($modified && !$quiet) {
>    print <<EOT;
>
>Warning: these changes may not be correct.
>
>These changes should be carefully reviewed manually and not combined with
>any functional changes.
>
>Compile, build and test your changes.
>
>You should understand and be responsible for all object changes.
>
>Make sure you read Documentation/SubmittingPatches before sending
>any changes to reviewers, maintainers or mailing lists.
>EOT
>}
  Joe,

  Suggestion.... please take those damn EOT lines out of it ..absolutely not
  required...or did you put for your own purpose?? As I believe it not the final
  product. Anyway, it would be good if those not there.

  Yup, I do like the "individual option" stuff ...so, you can only mess around
  single thing than the whole lot.

  ~Bhaskar


Download attachment "signature.asc" of type "application/pgp-signature" (489 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ