1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 17:56:01 +02:00

[208500] find replace mishandles searches for values greater than the max signed value of byte

This commit is contained in:
Ted Williams 2007-11-02 02:35:43 +00:00
parent 9026af2c92
commit ff501148f5

View file

@ -181,13 +181,13 @@ public class FindReplaceDialog extends SelectionDialog
if(formatAsciiButton.getSelection()) if(formatAsciiButton.getSelection())
return replaceText.getText().getBytes(); return replaceText.getText().getBytes();
else if(formatHexButton.getSelection()) else if(formatHexButton.getSelection())
return new BigInteger(replaceText.getText().toUpperCase().startsWith("0X") ? replaceText.getText().substring(2) : replaceText.getText(), 16).toByteArray(); return removeZeroPrefixByte(new BigInteger(replaceText.getText().toUpperCase().startsWith("0X") ? replaceText.getText().substring(2) : replaceText.getText(), 16).toByteArray());
else if(formatOctalButton.getSelection()) else if(formatOctalButton.getSelection())
return new BigInteger(replaceText.getText().startsWith("0") ? replaceText.getText().substring(1) : replaceText.getText(), 8).toByteArray(); return removeZeroPrefixByte(new BigInteger(replaceText.getText().startsWith("0") ? replaceText.getText().substring(1) : replaceText.getText(), 8).toByteArray());
else if(formatBinaryButton.getSelection()) else if(formatBinaryButton.getSelection())
return new BigInteger(replaceText.getText(), 2).toByteArray(); return removeZeroPrefixByte(new BigInteger(replaceText.getText(), 2).toByteArray());
else if(formatDecimalButton.getSelection()) else if(formatDecimalButton.getSelection())
return new BigInteger(replaceText.getText(), 10).toByteArray(); return removeZeroPrefixByte(new BigInteger(replaceText.getText(), 10).toByteArray());
else if(formatByteSequenceButton.getSelection()) else if(formatByteSequenceButton.getSelection())
return parseByteSequence(replaceText.getText()); return parseByteSequence(replaceText.getText());
@ -891,7 +891,7 @@ public class FindReplaceDialog extends SelectionDialog
public int getByteLength() public int getByteLength()
{ {
return fPhrase.toByteArray().length; return removeZeroPrefixByte(fPhrase.toByteArray()).length;
} }
public String toString() public String toString()
@ -906,10 +906,20 @@ public class FindReplaceDialog extends SelectionDialog
targetBytes[i] = bytes[i].getValue(); targetBytes[i] = bytes[i].getValue();
// TODO endian? // TODO endian?
BigInteger targetBigInteger = new BigInteger(targetBytes); BigInteger targetBigInteger = new BigInteger(targetBytes).and(BigInteger.valueOf(0xFF));
return fPhrase.equals(targetBigInteger); return fPhrase.equals(targetBigInteger);
} }
} }
private byte[] removeZeroPrefixByte(byte[] bytes)
{
if(bytes[0] != 0)
return bytes;
byte[] processedBytes = new byte[bytes.length - 1];
System.arraycopy(bytes, 1, processedBytes, 0, processedBytes.length);
return processedBytes;
}
} }