Mercurial > paraspace
annotate paraspace/tests/dex_deptracker_test.py @ 135:b488ca519709
Make sure elements are absolute incremental for sorted arrays when injecting.
- All sorted array of DEXFile must be absolute incremental.
- If injected one is the same order as one already in the array, the one
in array are used to replace injected one.
- All references to clone and injected one refer to ones already in array
instead.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Tue, 09 Aug 2011 21:28:13 +0800 |
parents | 044bfc415577 |
children | 90690a001172 |
rev | line source |
---|---|
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
1 from paraspace import dexfile |
123
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2 from paraspace.dex_deptracker import prepare_dep_decls |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
3 from paraspace.dex_deptracker import restore_dependencies |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
4 import os |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
5 |
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
6 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
7 def _install_dexfile_4_deptracker(): |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
8 global dexfile |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
9 import imp, sys |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
10 from paraspace import dex_deptracker |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
11 from paraspace import injection |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
12 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
13 try: |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
14 new_dexfile = imp.load_compiled('paraspace.dexfile', dexfile.__file__) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
15 except ImportError: |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
16 new_dexfile = imp.load_source('paraspace.dexfile', dexfile.__file__) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
17 pass |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
18 dex_deptracker.dexfile = new_dexfile |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
19 dexfile = new_dexfile |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
20 dex_deptracker._nest_types = (dexfile.array, dexfile.cond, dexfile.switch) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
21 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
22 injection.dex_type_2_array_attr_map = \ |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
23 injection._saved_dex_type_2_array_attr_map |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
24 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
25 sys.modules['paraspace.dexfile'] = new_dexfile |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
26 pass |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
27 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
28 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
29 def update_offset_test(): |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
30 from paraspace.dex_deptracker import collect_all_dep_decls |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
31 from paraspace.dex_deptracker import build_dependencies |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
32 from paraspace.dex_deptracker import _install_markers |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
33 from paraspace.dex_deptracker import _patch_dex_type_markers |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
34 from paraspace.dex_deptracker import update_offset |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
35 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
36 _install_dexfile_4_deptracker() |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
37 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
38 all_dep_decls = collect_all_dep_decls() |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
39 _install_markers(all_dep_decls) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
40 _patch_dex_type_markers(all_dep_decls) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
41 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
42 srcdir = os.path.dirname(__file__) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
43 srcroot = os.path.join(srcdir, '..', '..') |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
44 testdatapath = os.path.join(srcroot, 'data', 'testdata1.dex') |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
45 dex = dexfile.DEXFile.open(testdatapath) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
46 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
47 build_dependencies(dex, all_dep_decls) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
48 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
49 offset0 = dex.typeLists.items[0].value.data_offset |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
50 dex.typeLists.items[0].value.data_offset = 0 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
51 offset1 = dex.typeLists.items[1].value.data_offset |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
52 dex.typeLists.items[1].value.data_offset = 0 |
126
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
53 |
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
54 cdoffset0 = dex.classDatas.items[0].data_offset |
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
55 dex.classDatas.items[0].data_offset = 0 |
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
56 cdoffset1 = dex.classDatas.items[1].data_offset |
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
57 dex.classDatas.items[1].data_offset = 0 |
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
58 cdoffsetlast = dex.classDatas.items[-1].data_offset |
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
59 dex.classDatas.items[-1].data_offset = 0 |
129
52749d91cc22
update index of elements while calling update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents:
127
diff
changeset
|
60 |
52749d91cc22
update index of elements while calling update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents:
127
diff
changeset
|
61 dex.typeIds.items[12].data_idx = 0 |
131
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
62 |
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
63 update_offset(dex, all_dep_decls) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
64 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
65 assert dex.typeLists.items[0].value.data_offset == offset0 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
66 assert dex.typeLists.items[1].value.data_offset == offset1 |
126
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
67 assert dex.classDatas.items[0].data_offset == cdoffset0 |
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
68 assert dex.classDatas.items[1].data_offset == cdoffset1 |
ff6f869273b7
Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents:
124
diff
changeset
|
69 assert dex.classDatas.items[-1].data_offset == cdoffsetlast |
129
52749d91cc22
update index of elements while calling update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents:
127
diff
changeset
|
70 assert dex.typeIds.items[12].data_idx == 12 |
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
71 pass |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
72 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
73 |
123
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
74 def restore_dependencies_test(): |
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
75 _install_dexfile_4_deptracker() |
123
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
76 |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
77 srcdir = os.path.dirname(__file__) |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
78 srcroot = os.path.join(srcdir, '..', '..') |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
79 datadir = os.path.join(srcroot, 'data') |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
80 helloworld_path = os.path.join(datadir, 'helloworld.dex') |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
81 |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
82 decls = prepare_dep_decls() |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
83 |
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
84 hello_dex = dexfile.DEXFile.open(helloworld_path) |
123
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
85 strids_size_saved = hello_dex.header.stringIdsSize |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
86 typeids_off_saved = hello_dex.header.typeIdsOff |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
87 data_off_saved = hello_dex.header.dataOff |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
88 map_off_saved = hello_dex.header.mapOff |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
89 file_sz_saved = hello_dex.header.fileSize |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
90 |
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
91 hello_linked = dexfile.DEXFile_linked.build_dependencies(hello_dex, decls) |
123
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
92 |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
93 first_strid = hello_linked.stringIds.items[0] |
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
94 strid = dexfile._DEX_StringId() |
123
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
95 strid.stringDataOff = first_strid.stringDataOff |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
96 hello_linked.stringIds.items.append(strid) |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
97 |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
98 restore_dependencies(hello_linked, decls) |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
99 |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
100 assert hello_linked.header.fileSize == (file_sz_saved + 4) |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
101 assert hello_linked.header.stringIdsSize == (strids_size_saved + 1) |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
102 assert hello_linked.header.typeIdsOff == (typeids_off_saved + 4) |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
103 assert hello_linked.header.dataOff == (data_off_saved + 4) |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
104 assert hello_linked.header.mapOff == (map_off_saved + 4) |
78357afb4a9d
Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
105 pass |
124
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
106 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
107 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
108 def sizoef_after_build_dep_test(): |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
109 from paraspace.dex_deptracker import update_offset |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
110 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
111 _install_dexfile_4_deptracker() |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
112 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
113 srcdir = os.path.dirname(__file__) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
114 srcroot = os.path.join(srcdir, '..', '..') |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
115 datadir = os.path.join(srcroot, 'data') |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
116 helloworld_path = os.path.join(datadir, 'helloworld.dex') |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
117 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
118 decls = prepare_dep_decls() |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
119 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
120 hello_dex = dexfile.DEXFile.open(helloworld_path) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
121 update_offset(hello_dex, decls) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
122 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
123 get_sz = lambda x: x.sizeof(x) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
124 assert get_sz(hello_dex.header) == 112 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
125 assert get_sz(hello_dex.stringIds) == 0x168 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
126 assert get_sz(hello_dex.typeIds) == (0x250-0x1d8) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
127 assert get_sz(hello_dex.protoIds) == (0x31c-0x250) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
128 assert get_sz(hello_dex.fieldIds) == (0x354-0x31c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
129 assert get_sz(hello_dex.methodIds) == (0x46c-0x354) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
130 assert get_sz(hello_dex.classDefs) == (0x58c-0x46c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
131 assert get_sz(hello_dex.annotationSetItems) == (0x5dc-0x58c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
132 assert get_sz(hello_dex.codeItems) == (0x8b8-0x5dc) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
133 assert get_sz(hello_dex.annotationsDirectoryItems) == (0x928-0x8b8) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
134 assert get_sz(hello_dex.typeLists) == (0x98a-0x928) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
135 assert get_sz(hello_dex.stringDataItems) == (0xe7d-0x98a) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
136 assert get_sz(hello_dex.debugInfoItems) == (0xf31-0xe7d) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
137 assert get_sz(hello_dex.annotationItems) == (0xf82-0xf31) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
138 assert get_sz(hello_dex.encodedArrayItems) == (0xf9d-0xf82) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
139 assert get_sz(hello_dex.classDatas) == (0x1024-0xf9d-1) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
140 assert hello_dex.maps.sizeof(hello_dex.maps) == 0xd0 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
141 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
142 hello_dex.compute_size() |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
143 unlinked_sz = hello_dex.sizeof(hello_dex) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
144 assert unlinked_sz == hello_dex.header.fileSize |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
145 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
146 hello_linked = dexfile.DEXFile_linked.build_dependencies(hello_dex, decls) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
147 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
148 hello_linked.compute_size() |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
149 linked_sz = hello_linked.sizeof(hello_linked) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
150 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
151 assert get_sz(hello_linked.header) == 112 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
152 assert get_sz(hello_linked.stringIds) == 0x168 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
153 assert get_sz(hello_linked.typeIds) == (0x250-0x1d8) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
154 assert get_sz(hello_linked.protoIds) == (0x31c-0x250) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
155 assert get_sz(hello_linked.fieldIds) == (0x354-0x31c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
156 assert get_sz(hello_linked.methodIds) == (0x46c-0x354) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
157 assert get_sz(hello_linked.classDefs) == (0x58c-0x46c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
158 assert get_sz(hello_linked.annotationSetItems) == (0x5dc-0x58c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
159 assert get_sz(hello_linked.codeItems) == (0x8b8-0x5dc) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
160 assert get_sz(hello_linked.annotationsDirectoryItems) == (0x928-0x8b8) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
161 assert get_sz(hello_linked.typeLists) == (0x98a-0x928) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
162 assert get_sz(hello_linked.stringDataItems) == (0xe7d-0x98a) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
163 assert get_sz(hello_linked.debugInfoItems) == (0xf31-0xe7d) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
164 assert get_sz(hello_linked.annotationItems) == (0xf82-0xf31) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
165 assert get_sz(hello_linked.encodedArrayItems) == (0xf9d-0xf82) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
166 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
167 assert linked_sz == unlinked_sz |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
168 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
169 first_strid = hello_linked.stringIds.items[0] |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
170 strid = dexfile._DEX_StringId() |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
171 strid.stringDataOff = first_strid.stringDataOff |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
172 hello_linked.stringIds.items.append(strid) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
173 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
174 hello_linked.compute_size() |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
175 linked_sz = hello_linked.sizeof(hello_linked) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
176 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
177 assert get_sz(hello_linked.header) == 112 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
178 assert get_sz(hello_linked.stringIds) == 0x16c |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
179 assert get_sz(hello_linked.typeIds) == (0x250-0x1d8) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
180 assert get_sz(hello_linked.protoIds) == (0x31c-0x250) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
181 assert get_sz(hello_linked.fieldIds) == (0x354-0x31c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
182 assert get_sz(hello_linked.methodIds) == (0x46c-0x354) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
183 assert get_sz(hello_linked.classDefs) == (0x58c-0x46c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
184 assert get_sz(hello_linked.annotationSetItems) == (0x5dc-0x58c) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
185 assert get_sz(hello_linked.codeItems) == (0x8b8-0x5dc) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
186 assert get_sz(hello_linked.annotationsDirectoryItems) == (0x928-0x8b8) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
187 assert get_sz(hello_linked.typeLists) == (0x98a-0x928) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
188 assert get_sz(hello_linked.stringDataItems) == (0xe7d-0x98a) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
189 assert get_sz(hello_linked.debugInfoItems) == (0xf31-0xe7d) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
190 assert get_sz(hello_linked.annotationItems) == (0xf82-0xf31) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
191 assert get_sz(hello_linked.encodedArrayItems) == (0xf9d-0xf82) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
192 |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
193 assert linked_sz == (unlinked_sz + 4) |
8e42b2816893
Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents:
123
diff
changeset
|
194 pass |
127
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
195 |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
196 |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
197 def dex_sort_sorted_arrays_test(): |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
198 from paraspace.dex_deptracker import dex_sort_sorted_arrays |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
199 |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
200 _install_dexfile_4_deptracker() |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
201 |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
202 srcdir = os.path.dirname(__file__) |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
203 srcroot = os.path.join(srcdir, '..', '..') |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
204 datadir = os.path.join(srcroot, 'data') |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
205 helloworld_path = os.path.join(datadir, 'helloworld.dex') |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
206 |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
207 decls = prepare_dep_decls() |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
208 |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
209 hello_dex = dexfile.DEXFile.open(helloworld_path) |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
210 hello_linked = \ |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
211 dexfile.DEXFile_linked.build_dependencies(hello_dex, decls) |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
212 |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
213 first = hello_linked.typeIds.items[0] |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
214 last = hello_linked.typeIds.items[-1] |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
215 hello_linked.typeIds.items[0] = last |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
216 hello_linked.typeIds.items[-1] = first |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
217 |
131
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
218 typeid10 = hello_linked.typeIds.items[10] |
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
219 typeid12 = hello_linked.typeIds.items[12] |
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
220 typeid10.descriptorIdx, typeid12.descriptorIdx = \ |
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
221 typeid12.descriptorIdx, typeid10.descriptorIdx |
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
222 |
127
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
223 dex_sort_sorted_arrays(hello_linked) |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
224 |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
225 assert hello_linked.typeIds.items[0] == first |
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
226 assert hello_linked.typeIds.items[-1] == last |
131
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
227 |
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
228 assert typeid10 > typeid12 |
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
229 assert hello_linked.typeIds.items[10] == typeid12 |
044bfc415577
Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents:
129
diff
changeset
|
230 assert hello_linked.typeIds.items[12] == typeid10 |
135
b488ca519709
Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents:
131
diff
changeset
|
231 |
b488ca519709
Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents:
131
diff
changeset
|
232 for protoid0, protoid1 in map(None, |
b488ca519709
Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents:
131
diff
changeset
|
233 hello_linked.protoIds.items[:-1], |
b488ca519709
Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents:
131
diff
changeset
|
234 hello_linked.protoIds.items[1:]): |
b488ca519709
Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents:
131
diff
changeset
|
235 assert protoid0 < protoid1 |
b488ca519709
Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents:
131
diff
changeset
|
236 pass |
127
650244dcdd82
Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents:
126
diff
changeset
|
237 pass |