1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
-- verify_globals.lua
-- need the path to find inspect.lua
local old_path = package.path
package.path = "lua/?.lua;" .. package.path
local inspect = require("inspect")
package.path = old_path
-- ignore things that change on different machines or every release
-- the following items still have to exist, but their values don't have to match
local filter = {
-- differences by machine
"DATA_DIR",
"USER_DIR",
"package.cpath",
"package.path",
"package.loaded",
"run_user_scripts_when_superuser",
"running_superuser",
-- differences in Lua versions
"_VERSION",
"package.config",
}
-- the following items don't have to exist
local ignore = {
-- not sure why this was removed in wireshark 1.11, but it was
"TreeItem.set_expert_flags",
-- in Lua 5.1 only
"debug.getfenv",
"debug.setfenv",
"gcinfo",
"getfenv",
"io.gfind",
"setfenv",
"math.mod",
"newproxy",
"string.gfind",
"table.foreach",
"table.foreachi",
"table.getn",
"table.setn",
-- in Lua 5.2+ only
"bit32",
"debug.getuservalu",
"debug.setuservalu",
"debug.upvalueid",
"debug.upvaluejoin",
"package.searchers",
"package.searchpath",
"rawlen",
"table.pack",
"table.unpack",
}
local arg={...} -- get passed-in args
-- arg1 = filename to read in
-- arg2 = 'verify' to verify all of read-in file is in _G (default); 'new' to output all items in _G that are not in read-in file
-- arg3 = 'nometa' to ignore metatables
print("-- Wireshark version: " .. get_version())
if #arg == 0 then
-- no args, so just output globals
print(inspect(_G, { serialize = true, filter = inspect.makeFilter(filter) }))
return
end
local file = assert(io.open(arg[1], "r"))
local input = file:read("*all")
input = inspect.marshal(input)
local nometa = false
if #arg > 2 and arg[3] == "nometa" then
nometa = true
end
if #arg == 1 or arg[2] == "verify" then
print(string.rep("\n", 2))
print("Verifying input file '"..arg[1].."' is contained within the global table")
local ret, diff = inspect.compare(input, _G, {
['filter'] = inspect.makeFilter(filter),
['ignore'] = inspect.makeFilter(ignore),
['nonumber'] = true,
['nometa'] = nometa
})
if not ret then
print("Comparison failed - global table does not have all the items in the input file!")
print(string.rep("\n", 2))
print(string.rep("-", 80))
print("Differences are:")
print(inspect(diff))
else
print("\n-----------------------------\n")
print("All tests passed!\n\n")
end
return
elseif #arg > 1 and arg[2] == "new" then
local ret, diff = inspect.compare(_G, input, {
['filter'] = inspect.makeFilter(filter),
['ignore'] = inspect.makeFilter(ignore),
['nonumber'] = true,
['keep'] = true,
['nometa'] = nometa
})
if not ret then
print(inspect(diff))
else
print("\n-----------------------------\n")
print("No new items!\n\n")
end
end
|