Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion Mono.Cecil/AssemblyReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -988,15 +988,21 @@ Range ReadListRange (uint current_index, Table current, Table target)
uint next_index;
var current_table = image.TableHeap [current];

var last_index = image.TableHeap [target].Length + 1;

if (current_index == current_table.Length)
next_index = image.TableHeap [target].Length + 1;
next_index = last_index;
else {
var position = this.position;
this.position += (int) (current_table.RowSize - image.GetTableIndexSize (target));
next_index = ReadTableIndex (target);
this.position = position;
}

if (next_index == 0 && image.TableHeap [target].Length == 0xffff) {
next_index = last_index;
}

list.Start = start;
list.Length = next_index - start;

Expand Down
24 changes: 24 additions & 0 deletions Test/Mono.Cecil.Tests/ParameterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -270,5 +270,29 @@ public void NullablePrimitiveParameterConstant ()
Assert.AreEqual (12, param.Constant);
});
}

[Test]
public void ModuleWith0xFFFFParameters ()
{
TestModule ("param0xffff.dll", module => {
var test = module.GetType ("Program");
var method = test.GetMethod ("F_65534");

Assert.AreEqual (1, method.Parameters.Count);
Assert.AreEqual ("a", method.Parameters [0].Name);
}, verify: false);
}

[Test]
public void ModuleWith0xFFFFParametersAndExtraParameterlessMethods ()
{
TestModule ("param0xffff-extended.dll", module => {
var test = module.GetType ("Program");
var method = test.GetMethod ("F_65534");

Assert.AreEqual (1, method.Parameters.Count);
Assert.AreEqual ("a", method.Parameters [0].Name);
}, verify: false);
}
}
}
Binary file not shown.
Binary file added Test/Resources/assemblies/param0xffff.dll
Binary file not shown.