1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

[290880] add null-pointer check on frame.getAddress() return value (applied patch)

This commit is contained in:
John Cortell 2009-09-30 09:34:33 +00:00
parent d9a409f830
commit b6cb68b56d

View file

@ -16,6 +16,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.core.IAddressFactory;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.cdi.CDIException;
@ -117,7 +118,8 @@ public class DisassemblyRetrieval extends CDebugElement implements ICDIEventList
if ( input instanceof ICStackFrame ) {
fInput = input;
ICStackFrame frame = (ICStackFrame)input;
BigInteger address = frame.getAddress().getValue();
IAddress frameAddress = frame.getAddress();
BigInteger address = (frameAddress != null) ? frameAddress.getValue() : BigInteger.valueOf(0);
if ( !containsAddress( address, fLines ) ) {
fCurrentOffset = 0;
reset();
@ -135,7 +137,6 @@ public class DisassemblyRetrieval extends CDebugElement implements ICDIEventList
public void retrieveDisassembly( Object input, Object base, int offset, int lineCount, boolean reveal, int flags ) throws DebugException {
fFlags = flags;
boolean showInstructions = ( (flags & FLAGS_SHOW_INSTRUCTIONS) != 0 );
boolean showSource = ( (flags & FLAGS_SHOW_SOURCE) != 0 );
List<IDisassemblyLine> lines = new ArrayList<IDisassemblyLine>( lineCount );
BigInteger startAddress = getCurrentStartAddress();
@ -289,19 +290,6 @@ public class DisassemblyRetrieval extends CDebugElement implements ICDIEventList
return null;
}
private IDisassemblyInstruction getPreviousInstruction( BigInteger baseAddress ) throws DebugException {
BigInteger endAddress = baseAddress.add( BigInteger.valueOf( 1 ) );
BigInteger startAddress = baseAddress;
IDisassemblyLine[] lines = new IDisassemblyLine[0];
int index = -1;
while( index == -1 && startAddress.compareTo( getGlobalStartAddress() ) > 0 ) {
startAddress = startAddress.subtract( BigInteger.valueOf( 1 ) );
lines = disassemble( startAddress, endAddress, false );
index = getIndexForAddress( baseAddress, lines );
}
return ( index > 0 ) ? (IDisassemblyInstruction)lines[index - 1] : null;
}
private IDisassemblyInstruction getFirstInstruction( IDisassemblyLine[] lines ) {
for ( IDisassemblyLine l : lines ) {
if ( l instanceof IDisassemblyInstruction )
@ -318,10 +306,6 @@ public class DisassemblyRetrieval extends CDebugElement implements ICDIEventList
return null;
}
private BigInteger getGlobalStartAddress() {
return getAddressFactory().getZero().getValue();
}
private BigInteger getGlobalEndAddress() {
return getAddressFactory().getMax().getValue();
}