@@ -134,7 +134,7 @@ else if (headerLine.toLowerCase().startsWith("ezcov")) {
134
134
135
135
// Whoops!
136
136
catch (Exception e ) {
137
- throw new AssertionError (e . getMessage () );
137
+ throw new AssertionError (e );
138
138
}
139
139
}
140
140
@@ -237,23 +237,29 @@ private void parseDrCovFile(RandomAccessFile reader) throws IOException {
237
237
if (isBinary ) {
238
238
int offset = readInt (reader );
239
239
short size = readShort (reader );
240
- short moduleId = readShort (reader );
240
+ int moduleId = readShort (reader ) & 0xFFFF ;
241
241
242
- // Add the block to the module
243
- drcovModules .get (moduleId ).addBlock (offset , size , moduleId );
242
+ // Make sure the module ID is valid
243
+ if (moduleId < numModules ){
244
+ // Add the block to the module
245
+ drcovModules .get (moduleId ).addBlock (offset , size , moduleId );
246
+ }
244
247
}
245
248
246
249
// Read a text block
247
250
else {
248
251
line = reader .readLine ();
249
252
match = Pattern .compile ("module\\ [\\ s*(\\ d+)\\ ]: 0x([0-9a-fA-F]+?),\\ s*(\\ d+)" ).matcher (line );
250
253
if (match .find ()) {
251
- short moduleId = Short . parseShort (match .group (1 ));
254
+ int moduleId = Integer . parseInt (match .group (1 )) & 0xFFFF ;
252
255
int offset = Integer .parseInt (match .group (2 ), 16 );
253
256
short size = Short .parseShort (match .group (3 ));
254
257
255
- // Add the block to the module
256
- drcovModules .get (moduleId ).addBlock (offset , size , moduleId );
258
+ // Make sure the module ID is valid
259
+ if (moduleId < numModules ){
260
+ // Add the block to the module
261
+ drcovModules .get (moduleId ).addBlock (offset , size , moduleId );
262
+ }
257
263
}
258
264
}
259
265
}
@@ -407,7 +413,7 @@ public DrCovModule(int moduleId, int parentId, int base, String name) {
407
413
* @param size Size of the block in bytes
408
414
* @param module Module ID
409
415
*/
410
- private void addBlock (int offset , short size , short module ) {
416
+ private void addBlock (int offset , short size , int module ) {
411
417
BasicBlock basicBlock = new BasicBlock (offset , size , module );
412
418
this .getBasicBlocks ().add (basicBlock );
413
419
}
@@ -444,7 +450,7 @@ private void addBlock(int offset, short size, String addressSpace) {
444
450
public class BasicBlock {
445
451
private int offset ;
446
452
private short size ;
447
- private short moduleId ;
453
+ private int moduleId ;
448
454
private AddressSpace addressSpace ;
449
455
450
456
/**
@@ -454,7 +460,7 @@ public class BasicBlock {
454
460
* @param size Size of the block in bytes
455
461
* @param moduleId Module ID
456
462
*/
457
- public BasicBlock (int offset , short size , short moduleId ) {
463
+ public BasicBlock (int offset , short size , int moduleId ) {
458
464
this .offset = offset ;
459
465
this .size = size ;
460
466
this .moduleId = moduleId ;
0 commit comments