This is an automatic generated email to let you know that the following patch were queued:
Subject: edid-decode: calculate and show remaining unused space Author: Hans Verkuil <[email protected]> Date: Wed Mar 30 12:07:56 2022 +0200 Report how many bytes in an Extension Block are unused, where applicable. This helps determining how full an Extension Block is. Signed-off-by: Hans Verkuil <[email protected]> edid-decode.cpp | 11 +++++++---- edid-decode.h | 3 ++- parse-cta-block.cpp | 5 +++-- parse-displayid-block.cpp | 5 +++-- parse-ls-ext-block.cpp | 3 ++- parse-vtb-ext-block.cpp | 5 +++++ 6 files changed, 22 insertions(+), 10 deletions(-) --- diff --git a/edid-decode.cpp b/edid-decode.cpp index b0183b6b8ea1..47460089b62d 100644 --- a/edid-decode.cpp +++ b/edid-decode.cpp @@ -234,7 +234,7 @@ static void show_msgs(bool is_warn) } -void do_checksum(const char *prefix, const unsigned char *x, size_t len) +void do_checksum(const char *prefix, const unsigned char *x, size_t len, unsigned unused_bytes) { unsigned char check = x[len - 1]; unsigned char sum = 0; @@ -246,11 +246,13 @@ void do_checksum(const char *prefix, const unsigned char *x, size_t len) sum += x[i]; if ((unsigned char)(check + sum) != 0) { - printf(" (should be 0x%02x)\n", -sum & 0xff); + printf(" (should be 0x%02x)", -sum & 0xff); fail("Invalid checksum 0x%02x (should be 0x%02x).\n", check, -sum & 0xff); - return; } + if (unused_bytes) + printf(" Unused space in Extension Block: %u byte%s", + unused_bytes, unused_bytes > 1 ? "s" : ""); printf("\n"); } @@ -1270,6 +1272,7 @@ void edid_state::parse_extension(const unsigned char *x) { block = block_name(x[0]); data_block.clear(); + unused_bytes = 0; printf("\n"); if (block_nr && x[0] == 0) @@ -1307,7 +1310,7 @@ void edid_state::parse_extension(const unsigned char *x) } data_block.clear(); - do_checksum("", x, EDID_PAGE_SIZE); + do_checksum("", x, EDID_PAGE_SIZE, unused_bytes); } void edid_state::print_preferred_timings() diff --git a/edid-decode.h b/edid-decode.h index e05a514dd9a7..ceb39b522fef 100644 --- a/edid-decode.h +++ b/edid-decode.h @@ -209,6 +209,7 @@ struct edid_state { unsigned block_nr; std::string block; std::string data_block; + unsigned unused_bytes; bool has_cta; bool has_dispid; bool hide_serial_numbers; @@ -496,7 +497,7 @@ void msg(bool is_warn, const char *fmt, ...); #endif -void do_checksum(const char *prefix, const unsigned char *x, size_t len); +void do_checksum(const char *prefix, const unsigned char *x, size_t len, unsigned unused_bytes = 0); std::string utohex(unsigned char x); std::string ouitohex(unsigned oui); std::string containerid2s(const unsigned char *x); diff --git a/parse-cta-block.cpp b/parse-cta-block.cpp index e846a66f8929..d525e2aceb41 100644 --- a/parse-cta-block.cpp +++ b/parse-cta-block.cpp @@ -2690,9 +2690,10 @@ void edid_state::parse_cta_block(const unsigned char *x) } detailed_block(detailed); } - if (!memchk(detailed, x + 127 - detailed)) { + unused_bytes = x + 127 - detailed; + if (!memchk(detailed, unused_bytes)) { data_block = "Padding"; - fail("CTA-861 padding contains non-zero bytes.\n"); + fail("Contains non-zero bytes.\n"); } } while (0); diff --git a/parse-displayid-block.cpp b/parse-displayid-block.cpp index 12fce07aafd2..a5c33c65a75c 100644 --- a/parse-displayid-block.cpp +++ b/parse-displayid-block.cpp @@ -2022,9 +2022,10 @@ void edid_state::parse_displayid_block(const unsigned char *x) data_block.clear(); do_checksum(" ", x + 1, x[2] + 5); - if (!memchk(x + 1 + x[2] + 5, 0x7f - (1 + x[2] + 5))) { + unused_bytes = 0x7f - (1 + x[2] + 5); + if (!memchk(x + 1 + x[2] + 5, unused_bytes)) { data_block = "Padding"; - fail("DisplayID padding contains non-zero bytes.\n"); + fail("Contains non-zero bytes.\n"); } dispid.is_base_block = false; } diff --git a/parse-ls-ext-block.cpp b/parse-ls-ext-block.cpp index 1643f7def5f1..3c991dc56ab4 100644 --- a/parse-ls-ext-block.cpp +++ b/parse-ls-ext-block.cpp @@ -64,7 +64,8 @@ void edid_state::parse_ls_ext_block(const unsigned char *x) parse_string_table(x + 1); x += x[0]; } - if (!memchk(x, orig + 127 - x)) { + unused_bytes = orig + 127 - x; + if (!memchk(x, unused_bytes)) { data_block.clear(); fail("Non-zero values in unused space.\n"); } diff --git a/parse-vtb-ext-block.cpp b/parse-vtb-ext-block.cpp index 7af19c4ea43a..15ff0efdfd03 100644 --- a/parse-vtb-ext-block.cpp +++ b/parse-vtb-ext-block.cpp @@ -55,4 +55,9 @@ void edid_state::parse_vtb_ext_block(const unsigned char *x) print_standard_timing(" ", x[0], x[1], true); } } + unused_bytes = y - x; + if (!memchk(x, unused_bytes)) { + data_block = "Padding"; + fail("Contains non-zero bytes.\n"); + } } _______________________________________________ linuxtv-commits mailing list [email protected] https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits
