Nmap Development mailing list archives
Re: [NSE] Unused library cleanup
From: Daniel Miller <bonsaiviking () gmail com>
Date: Mon, 09 Jul 2012 16:45:34 -0500
Patrick,Thanks for this info. It's a lot to think about, but I think I'll take your advice and work on nse_remove_require. Just to be sure that I haven't messed anything up, I'll hold off on committing my patch until I've had the chance to play around with the existing tools and better understand what I'm doing.
Dan On 07/09/2012 03:33 PM, Patrick Donnelly wrote:
Hi Daniel, On Sun, Jul 8, 2012 at 9:27 AM, Daniel Miller <bonsaiviking () gmail com> wrote:I wrote a small Perl script (attached) that checks for Lua libraries required but not used (for one definition of used).I suggest you maybe look at /nmap-private-dev/misc-scripts/nse_remove_require and /nmap-private-dev/misc-scripts/nse_check_globals. The first script removes all occurrences of require so that nse_check_globals can add and alphabetize all requires. nse_remove_require is also incidentally useful for removing unneeded requires. Unfortunately nse_remove_require needs some work as it currently removes require lines that it should not, e.g. commented requires: -- @usage -- require "foo" You may want to improve upon nse_remove_require so that it is more foolproof. So far, I know it should not remove require statements like this: o Lines which are commented (space then "--"). o Move silent_require statements to top of script. o Don't remove instances of require "strict" o Don't remove requires that are commented with "cycle" (smb.lua) I played around with vim regular expressions and have given up. I think something like perl or Lua should easily work but haven't gotten around to fixing it.2. I'm not sure if the "method"-style of function use is affected by having or not having a local reference to a library. For example, string.format("%d", 3) runs faster if local string = require "string". But is the same true for ("%d"):format(3)?No. The string type has a global metatable shared by all strings which is set by the Lua string library [1]. This is why it's possible to index string methods from a string. Whether or not you have a local reference to the string library is irrelevant. To illustrate: $ bin/lua Lua 5.2.1 Copyright (C) 1994-2012 Lua.org, PUC-Rioprint(require "string", getmetatable("").__index)table: 0x205aca0 table: 0x205aca0print(require "string".format, getmetatable("").__index.format, ("").format)function: 0x41dad0 function: 0x41dad0 function: 0x41dad0 [1] http://www.lua.org/source/5.2/lstrlib.c.html#createmetatable3. packetdecoders.lua had requires inside functions, which I think is not a great idea, since those functions should try to be as fast as possible. I moved them to the top of the file instead.Be careful because there are some libraries (smb.lua is the only one I know of) that need to do this. It looks like your fix for packetdecoders is good though.
_______________________________________________ Sent through the nmap-dev mailing list http://cgi.insecure.org/mailman/listinfo/nmap-dev Archived at http://seclists.org/nmap-dev/
Current thread:
- [NSE] Unused library cleanup Daniel Miller (Jul 08)
- Re: [NSE] Unused library cleanup David Fifield (Jul 09)
- Re: [NSE] Unused library cleanup Patrick Donnelly (Jul 09)
- Re: [NSE] Unused library cleanup Daniel Miller (Jul 09)