mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:17:34 +00:00
HexEditor: Fix out of bounds cursor
Fixing out of bounds cursor in three different cases: - when the buffer is empty - when loading new files - when entering values at the end of the buffer
This commit is contained in:
parent
a31ca1282e
commit
97878dfb4d
1 changed files with 16 additions and 2 deletions
|
@ -67,6 +67,8 @@ void HexEditor::set_buffer(const ByteBuffer& buffer)
|
||||||
{
|
{
|
||||||
m_buffer = buffer;
|
m_buffer = buffer;
|
||||||
set_content_length(buffer.size());
|
set_content_length(buffer.size());
|
||||||
|
m_position = 0;
|
||||||
|
m_byte_position = 0;
|
||||||
update();
|
update();
|
||||||
update_status();
|
update_status();
|
||||||
}
|
}
|
||||||
|
@ -417,6 +419,10 @@ void HexEditor::keydown_event(GUI::KeyEvent& event)
|
||||||
void HexEditor::hex_mode_keydown_event(GUI::KeyEvent& event)
|
void HexEditor::hex_mode_keydown_event(GUI::KeyEvent& event)
|
||||||
{
|
{
|
||||||
if ((event.key() >= KeyCode::Key_0 && event.key() <= KeyCode::Key_9) || (event.key() >= KeyCode::Key_A && event.key() <= KeyCode::Key_F)) {
|
if ((event.key() >= KeyCode::Key_0 && event.key() <= KeyCode::Key_9) || (event.key() >= KeyCode::Key_A && event.key() <= KeyCode::Key_F)) {
|
||||||
|
if (m_buffer.is_empty())
|
||||||
|
return;
|
||||||
|
ASSERT(m_position >= 0);
|
||||||
|
ASSERT(m_position < m_buffer.size());
|
||||||
|
|
||||||
// yes, this is terrible... but it works.
|
// yes, this is terrible... but it works.
|
||||||
auto value = (event.key() >= KeyCode::Key_0 && event.key() <= KeyCode::Key_9)
|
auto value = (event.key() >= KeyCode::Key_0 && event.key() <= KeyCode::Key_9)
|
||||||
|
@ -429,7 +435,8 @@ void HexEditor::hex_mode_keydown_event(GUI::KeyEvent& event)
|
||||||
m_byte_position++;
|
m_byte_position++;
|
||||||
} else {
|
} else {
|
||||||
m_buffer.data()[m_position] = (m_buffer.data()[m_position] & 0xF0) | value; // save the first 4 bits, OR the new value in the last 4
|
m_buffer.data()[m_position] = (m_buffer.data()[m_position] & 0xF0) | value; // save the first 4 bits, OR the new value in the last 4
|
||||||
m_position++;
|
if (m_position + 1 < m_buffer.size())
|
||||||
|
m_position++;
|
||||||
m_byte_position = 0;
|
m_byte_position = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -441,10 +448,17 @@ void HexEditor::hex_mode_keydown_event(GUI::KeyEvent& event)
|
||||||
|
|
||||||
void HexEditor::text_mode_keydown_event(GUI::KeyEvent& event)
|
void HexEditor::text_mode_keydown_event(GUI::KeyEvent& event)
|
||||||
{
|
{
|
||||||
|
if (m_buffer.is_empty())
|
||||||
|
return;
|
||||||
|
ASSERT(m_position >= 0);
|
||||||
|
ASSERT(m_position < m_buffer.size());
|
||||||
|
|
||||||
m_tracked_changes.set(m_position, m_buffer.data()[m_position]);
|
m_tracked_changes.set(m_position, m_buffer.data()[m_position]);
|
||||||
m_buffer.data()[m_position] = (u8)event.text().characters()[0]; // save the first 4 bits, OR the new value in the last 4
|
m_buffer.data()[m_position] = (u8)event.text().characters()[0]; // save the first 4 bits, OR the new value in the last 4
|
||||||
m_position++;
|
if (m_position + 1 < m_buffer.size())
|
||||||
|
m_position++;
|
||||||
m_byte_position = 0;
|
m_byte_position = 0;
|
||||||
|
|
||||||
update();
|
update();
|
||||||
update_status();
|
update_status();
|
||||||
did_change();
|
did_change();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue