mirror of
https://github.com/WerWolv/ImHex-Patterns.git
synced 2026-03-28 07:47:02 -05:00
pattern/bencode: Various fixes (#393)
* Fix bencode dictionary When parsing a bencode dictionary, the end character 'e' was never consumed. This caused a misinterpretation of the character as struct Value of an unknown type 'e'. * Fix bencode list A list was not included in the Value's parsing logic so it may have been mistakenly parsed as a string. * Fix std::ctype::isprint not including space The space character, 0x20, is considered as a printable character in ASCII and in >=C89. Adding it to the range of std::ctype::isprint also fixes other std::ctype functions that use it. * Fix bencode byte string formatting Byte strings do not render nicely in pattern data's value column if they contain non-printable characters. This commit makes the value of byte strings to be surrounded by quotation marks, and renders a warning text without quotation marks if the byte string contains non-printable characters.
This commit is contained in:
@@ -38,10 +38,15 @@ namespace bencode {
|
||||
ASCIIDecimal length;
|
||||
char separator [[hidden]];
|
||||
char value[length];
|
||||
} [[sealed, format("bencode::format_string"), transform("bencode::format_string")]];
|
||||
} [[sealed, format("bencode::format_string")]];
|
||||
|
||||
fn format_string(String string) {
|
||||
return string.value;
|
||||
for (u64 i = 0, i < string.length, i = i + 1) {
|
||||
if (!std::ctype::isprint(string.value[i])) {
|
||||
return "Contains non-printable characters";
|
||||
}
|
||||
}
|
||||
return std::format("\"{}\"", string.value);
|
||||
};
|
||||
|
||||
using Bencode;
|
||||
@@ -57,6 +62,10 @@ namespace bencode {
|
||||
|
||||
if (type == Type::Dictionary) {
|
||||
DictionaryEntry entry[while(std::mem::read_unsigned($, 1) != 'e')];
|
||||
char end;
|
||||
} else if (type == Type::List) {
|
||||
Value entry[while(std::mem::read_unsigned($, 1) != 'e')];
|
||||
char end;
|
||||
} else if (type == Type::Integer) {
|
||||
ASCIIDecimal value;
|
||||
char end;
|
||||
|
||||
Reference in New Issue
Block a user