@@ -709,15 +709,11 @@ USTATUS FfsParser::parseMeRegion(const UByteArray & me, const UINT32 localOffset
709709 bool versionFound = true ;
710710 bool emptyRegion = false ;
711711 // Check for empty region
712- if (me.size () == me.count (' \xFF ' )) {
712+ auto c = checkSingleByte (me);
713+ if (c <= UINT8_MAX) {
713714 // Further parsing not needed
714715 emptyRegion = true ;
715- info += (" \n State: empty (FFh)" );
716- }
717- else if (me.size () == me.count (' \x00 ' )) {
718- // Further parsing not needed
719- emptyRegion = true ;
720- info += (" \n State: empty (00h)" );
716+ info += usprintf (" \n State: empty (%02Xh)" , (UINT8)c);
721717 }
722718 else {
723719 // Search for new signature
@@ -778,17 +774,13 @@ USTATUS FfsParser::parsePdrRegion(const UByteArray & pdr, const UINT32 localOffs
778774
779775 // Check for empty region
780776 bool emptyRegion = false ;
781- if (pdr.size () == pdr.count (' \xFF ' )) {
782- // Further parsing not needed
783- emptyRegion = true ;
784- info += (" \n State: empty (FFh)" );
785- }
786- else if (pdr.size () == pdr.count (' \x00 ' )) {
777+ auto c = checkSingleByte (pdr);
778+ if (c <= UINT8_MAX) {
787779 // Further parsing not needed
788780 emptyRegion = true ;
789- info += (" \n State: empty (00h) " );
781+ info += usprintf (" \n State: empty (%02Xh) " , (UINT8)c );
790782 }
791-
783+
792784 // Add tree item
793785 index = model->addItem (localOffset, Types::Region, Subtypes::PdrRegion, name, UString (), info, UByteArray (), pdr, UByteArray (), Fixed, parent);
794786
@@ -814,15 +806,11 @@ USTATUS FfsParser::parseDevExp1Region(const UByteArray & devExp1, const UINT32 l
814806
815807 // Check for empty region
816808 bool emptyRegion = false ;
817- if (devExp1.size () == devExp1.count (' \xFF ' )) {
809+ auto c = checkSingleByte (devExp1);
810+ if (c <= UINT8_MAX) {
818811 // Further parsing not needed
819812 emptyRegion = true ;
820- info += (" \n State: empty (FFh)" );
821- }
822- else if (devExp1.size () == devExp1.count (' \x00 ' )) {
823- // Further parsing not needed
824- emptyRegion = true ;
825- info += (" \n State: empty (00h)" );
813+ info += usprintf (" \n State: empty (%02Xh)" , (UINT8)c);
826814 }
827815
828816 // Add tree item
@@ -846,17 +834,13 @@ USTATUS FfsParser::parseGenericRegion(const UINT8 subtype, const UByteArray & re
846834
847835 // Check for empty region
848836 bool emptyRegion = false ;
849- if (region.size () == region.count (' \xFF ' )) {
850- // Further parsing not needed
851- emptyRegion = true ;
852- info += (" \n State: empty (FFh)" );
853- }
854- else if (region.size () == region.count (' \x00 ' )) {
837+ auto c = checkSingleByte (region);
838+ if (c <= UINT8_MAX) {
855839 // Further parsing not needed
856840 emptyRegion = true ;
857- info += (" \n State: empty (00h) " );
841+ info += usprintf (" \n State: empty (%02Xh) " , (UINT8)c );
858842 }
859-
843+
860844 // Add tree item
861845 index = model->addItem (localOffset, Types::Region, subtype, name, UString (), info, UByteArray (), region, UByteArray (), Fixed, parent);
862846
@@ -1166,7 +1150,7 @@ USTATUS FfsParser::parseRawArea(const UModelIndex & index)
11661150 info = usprintf (" Full size: %Xh (%u)" , (UINT32)freeSpace.size (), (UINT32)freeSpace.size ());
11671151
11681152 // Check that remaining unparsed bytes are actually empty
1169- if (freeSpace. count (emptyByte ) == freeSpace. size () ) { // Free space
1153+ if (checkSingleByte (freeSpace ) == emptyByte ) { // Free space
11701154 // Add tree item
11711155 model->addItem (entryOffset, Types::FreeSpace, 0 , UString (" Free space" ), UString (), info, UByteArray (), freeSpace, UByteArray (), Fixed, headerIndex);
11721156 }
@@ -1972,7 +1956,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
19721956
19731957 // Check that we are at the empty space
19741958 UByteArray header = volumeBody.mid (fileOffset, (int )std::min (sizeof (EFI_FFS_FILE_HEADER), (size_t )volumeBodySize - fileOffset));
1975- if (header. count (emptyByte ) == header. size ()) { // Empty space
1959+ if (checkSingleByte (header ) == emptyByte) { // Empty space
19761960 // Check volume usedSpace entry to be valid
19771961 if (usedSpace > 0 && usedSpace == fileOffset + volumeHeaderSize) {
19781962 if (model->hasEmptyParsingData (index) == false ) {
@@ -1986,7 +1970,7 @@ USTATUS FfsParser::parseVolumeBody(const UModelIndex & index)
19861970
19871971 // Check free space to be actually free
19881972 UByteArray freeSpace = volumeBody.mid (fileOffset);
1989- if (freeSpace. count (emptyByte ) != freeSpace. size () ) {
1973+ if (checkSingleByte (freeSpace ) != emptyByte ) {
19901974 // Search for the first non-empty byte
19911975 UINT32 i;
19921976 UINT32 size = (UINT32)freeSpace.size ();
@@ -2440,7 +2424,7 @@ USTATUS FfsParser::parsePadFileBody(const UModelIndex & index)
24402424 }
24412425
24422426 // Check if the while padding file is empty
2443- if (body. size ( ) == body. count ( emptyByte) )
2427+ if (checkSingleByte (body ) == emptyByte)
24442428 return U_SUCCESS;
24452429
24462430 // Search for the first non-empty byte
@@ -4501,7 +4485,8 @@ USTATUS FfsParser::parseMicrocodeVolumeBody(const UModelIndex & index)
45014485 UByteArray ucode = model->body (index).mid (offset);
45024486
45034487 // Check for empty area
4504- if (ucode.size () == ucode.count (' \xFF ' ) || ucode.size () == ucode.count (' \x00 ' )) {
4488+ auto c = checkSingleByte (ucode);
4489+ if (c == 0 || c == 0xFF ) {
45054490 result = U_INVALID_MICROCODE;
45064491 }
45074492 else {
0 commit comments