From f2d12773c6e27d565f643a791083edab3516f15c Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 11 Sep 2017 18:31:22 +0100 Subject: [PATCH] * ScsiEvpd.cs: Take care of null returns on EVPD decoding. * ViewReport.aspx.cs: Catch exceptions on USB descriptor reading. --- DiscImageChef.Server/App_Start/ScsiEvpd.cs | 46 ++++++++++++---------- DiscImageChef.Server/ViewReport.aspx.cs | 9 ++++- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/DiscImageChef.Server/App_Start/ScsiEvpd.cs b/DiscImageChef.Server/App_Start/ScsiEvpd.cs index bf958b0f7..36b83a645 100644 --- a/DiscImageChef.Server/App_Start/ScsiEvpd.cs +++ b/DiscImageChef.Server/App_Start/ScsiEvpd.cs @@ -46,48 +46,54 @@ namespace DiscImageChef.Server.App_Start { foreach(pageType evpd in pages) { + string decoded; if(evpd.page >= 0x01 && evpd.page <= 0x7F) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.DecodeASCIIPage(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.DecodeASCIIPage(evpd.value); else if(evpd.page == 0x81) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_81(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_81(evpd.value); else if(evpd.page == 0x82) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.DecodePage82(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.DecodePage82(evpd.value); else if(evpd.page == 0x83) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_83(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_83(evpd.value); else if(evpd.page == 0x84) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_84(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_84(evpd.value); else if(evpd.page == 0x85) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_85(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_85(evpd.value); else if(evpd.page == 0x86) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_86(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_86(evpd.value); else if(evpd.page == 0x89) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_89(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_89(evpd.value); else if(evpd.page == 0xB0) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_B0(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_B0(evpd.value); else if(evpd.page == 0xB2) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), string.Format("TapeAlert Supported Flags Bitmap: 0x{0:X16}
", Decoders.SCSI.EVPD.DecodePageB2(evpd.value))); + decoded = string.Format("TapeAlert Supported Flags Bitmap: 0x{0:X16}
", Decoders.SCSI.EVPD.DecodePageB2(evpd.value)); else if(evpd.page == 0xB4) - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.DecodePageB4(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.DecodePageB4(evpd.value); else if(evpd.page == 0xC0 && vendor.Trim() == "quantum") - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_C0_Quantum(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_C0_Quantum(evpd.value); else if(evpd.page == 0xC0 && vendor.Trim() == "seagate") - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_C0_Seagate(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_C0_Seagate(evpd.value); else if(evpd.page == 0xC0 && vendor.Trim() == "ibm") - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_C0_IBM(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_C0_IBM(evpd.value); else if(evpd.page == 0xC1 && vendor.Trim() == "ibm") - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_C1_IBM(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_C1_IBM(evpd.value); else if((evpd.page == 0xC0 || evpd.page == 0xC1) && vendor.Trim() == "certance") - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_C0_C1_Certance(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_C0_C1_Certance(evpd.value); else if((evpd.page == 0xC2 || evpd.page == 0xC3 || evpd.page == 0xC4 || evpd.page == 0xC5 || evpd.page == 0xC6) && vendor.Trim() == "certance") - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_C2_C3_C4_C5_C6_Certance(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_C2_C3_C4_C5_C6_Certance(evpd.value); else if((evpd.page == 0xC0 || evpd.page == 0xC1 || evpd.page == 0xC2 || evpd.page == 0xC3 || evpd.page == 0xC4 || evpd.page == 0xC5) && vendor.Trim() == "hp") - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_C0_to_C5_HP(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_C0_to_C5_HP(evpd.value); else if(evpd.page == 0xDF && vendor.Trim() == "certance") - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), Decoders.SCSI.EVPD.PrettifyPage_DF_Certance(evpd.value).Replace("\n", "
")); + decoded = Decoders.SCSI.EVPD.PrettifyPage_DF_Certance(evpd.value); else - evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), "Undecoded"); + decoded = "Undecoded"; + + if(!string.IsNullOrEmpty(decoded)) + decoded = decoded.Replace("\n", "
"); + + evpdPages.Add(string.Format("EVPD page {0:X2}h", evpd.page), decoded); } } } diff --git a/DiscImageChef.Server/ViewReport.aspx.cs b/DiscImageChef.Server/ViewReport.aspx.cs index 3427f8af0..2668969dc 100644 --- a/DiscImageChef.Server/ViewReport.aspx.cs +++ b/DiscImageChef.Server/ViewReport.aspx.cs @@ -471,7 +471,14 @@ namespace DiscImageChef.Server if(_line[0] == '\t') continue; - number = Convert.ToUInt16(_line.Substring(0, 4), 16); + try + { + number = Convert.ToUInt16(_line.Substring(0, 4), 16); + } + catch(FormatException) + { + continue; + } if(number == vendor) {