diff --git a/.gitignore b/.gitignore index 622dd550..1df001a9 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ DICT fuzz-*.log crash-* oom-* +out.bin + diff --git a/Library/OcSmbiosLib/SmbiosInternal.c b/Library/OcSmbiosLib/SmbiosInternal.c index 3dca2d33..adf93088 100755 --- a/Library/OcSmbiosLib/SmbiosInternal.c +++ b/Library/OcSmbiosLib/SmbiosInternal.c @@ -107,13 +107,10 @@ UINT8 SmbiosOverrideString ( IN OC_SMBIOS_TABLE *Table, IN CONST CHAR8 *Override OPTIONAL, - IN UINT8 *Index, - IN BOOLEAN Hex + IN UINT8 *Index ) { UINT32 Length; - UINT32 ByteLength; - UINT32 MaxLength; // // No override. @@ -122,36 +119,30 @@ SmbiosOverrideString ( return 0; } - // - // In hex format each string is prefixed with 0x and each char becomes two. - // - MaxLength = Hex ? SMBIOS_STRING_MAX_LENGTH / 2 - SMBIOS_STRING_HEX_PREFIX_SIZE : SMBIOS_STRING_MAX_LENGTH; - Length = (UINT32) AsciiStrLen (Override); // // Truncate to fit but do not error. // - if (Length > MaxLength) { - Length = MaxLength; - DEBUG ((DEBUG_INFO, "SMBIOS truncating '%a' to %u bytes for hex %d\n", Override, Length, Hex)); + if (Length > SMBIOS_STRING_MAX_LENGTH) { + Length = SMBIOS_STRING_MAX_LENGTH; + DEBUG ((DEBUG_INFO, "SMBIOS truncating '%a' to %u bytes for safe %d\n", Override, Length, Safe)); + } + + while (Length > 0 && Override[Length - 1] == ' ') { + Length--; } if (Length == 0) { return 0; } - ByteLength = Hex ? Length * 2 + SMBIOS_STRING_HEX_PREFIX_SIZE + 1 : Length + 1; - if (EFI_ERROR (SmbiosExtendTable (Table, ByteLength))) { - DEBUG ((DEBUG_WARN, "SMBIOS failed to write '%a' with %u byte extension\n", Override, ByteLength)); + if (EFI_ERROR (SmbiosExtendTable (Table, Length + 1))) { + DEBUG ((DEBUG_WARN, "SMBIOS failed to write '%a' with %u byte extension\n", Override, Length + 1)); return 0; } - if (Hex) { - return SmbiosSetStringHex (&Table->CurrentStrPtr, Override, Length, Index); - } - - return SmbiosSetString (&Table->CurrentStrPtr, Override, Length, Index); + return SmbiosSetString (&Table->CurrentStrPtr, Override, Length, Index, Safe); } STATIC @@ -442,49 +433,15 @@ SmbiosSetString ( ASSERT (Buffer != NULL); ASSERT (String != NULL); ASSERT (Index != NULL); + ASSERT (Length > 0); - - if (Length > 0) { - CopyMem (*Buffer, String, Length); - } - + CopyMem (*Buffer, String, Length); *Buffer += Length + 1; (*Index)++; return *Index; } -UINT8 -SmbiosSetStringHex ( - IN OUT CHAR8 **Buffer, - IN CONST CHAR8 *String, - IN UINT32 Length, - IN OUT UINT8 *Index - ) -{ - CHAR8 *Target; - UINT8 Byte; - - Target = *Buffer; - - if (Length > 0) { - *Target++ = '0'; - *Target++ = 'x'; - - while (Length > 0) { - Byte = (UINT8) (*String++); - *Target++ = "0123456789ABCDEF"[((Byte >> 4U) & 0xFU)]; - *Target++ = "0123456789ABCDEF"[(Byte & 0xFU)]; - Length--; - } - } - - *Buffer = Target + 1; - (*Index)++; - - return *Index; -} - UINT32 SmbiosGetStructureLength ( IN APPLE_SMBIOS_STRUCTURE_POINTER SmbiosTable, diff --git a/Library/OcSmbiosLib/SmbiosInternal.h b/Library/OcSmbiosLib/SmbiosInternal.h index 50bd69a8..5559003c 100755 --- a/Library/OcSmbiosLib/SmbiosInternal.h +++ b/Library/OcSmbiosLib/SmbiosInternal.h @@ -23,16 +23,6 @@ // #define SMBIOS_STRUCTURE_TERMINATOR_SIZE 2 -// -// 0x prefix size in SMBIOS strings in hex mode. -// -#define SMBIOS_STRING_HEX_PREFIX_SIZE 2 - -// -// 0x prefix size in SMBIOS strings in hex mode. -// -#define SMBIOS_ENTRY_POINT_CHECKSUM_SIZE 16U - // // According to SMBIOS spec (3.2.0, page 26) SMBIOS handle is a number from 0 to 0xFF00. // SMBIOS spec does not require handles to be contiguous or remain valid across SMBIOS. @@ -170,7 +160,7 @@ SmbiosTableFree ( @param[in, out] Table Current table buffer. @param[in] Override String data override. @param[in, out] Index Pointer to current string index, incremented on success. - @param[in] Hex Write in hex format. + @param[in] Safe Filter certain characters. @retval assigned string index or 0 **/ @@ -178,8 +168,7 @@ UINT8 SmbiosOverrideString ( IN OUT OC_SMBIOS_TABLE *Table, IN CONST CHAR8 *Override OPTIONAL, - IN OUT UINT8 *Index, - IN BOOLEAN Hex + IN OUT UINT8 *Index ); /** @@ -245,24 +234,6 @@ SmbiosSetString ( IN OUT UINT8 *Index ); -/** - Write string to SMBIOS structure in hex format - - @param[in, out] Buffer Pointer to location containing the current address within the buffer. - @param[in] String Buffer containing the null terminated ascii string. - @param[in] Length String length to write. - @param[in, out] Index Pointer to current string index, incremented on success. - - @retval assigned string index or 0 -**/ -UINT8 -SmbiosSetStringHex ( - IN OUT CHAR8 **Buffer, - IN CONST CHAR8 *String, - IN UINT32 Length, - IN OUT UINT8 *Index - ); - /** Obtain and validate structure length. diff --git a/Library/OcSmbiosLib/SmbiosPatch.c b/Library/OcSmbiosLib/SmbiosPatch.c index ebe14c30..366e83a6 100755 --- a/Library/OcSmbiosLib/SmbiosPatch.c +++ b/Library/OcSmbiosLib/SmbiosPatch.c @@ -45,7 +45,7 @@ STATIC SMBIOS_TABLE_3_0_ENTRY_POINT *mOriginalSmbios3; STATIC APPLE_SMBIOS_STRUCTURE_POINTER mOriginalTable; STATIC UINT32 mOriginalTableSize; -#define SMBIOS_OVERRIDE_STR(Table, Field, Original, Value, Index, Fallback, Hex) \ +#define SMBIOS_OVERRIDE_S(Table, Field, Original, Value, Index, Fallback) \ do { \ CONST CHAR8 *RealValue__ = (Value); \ if (RealValue__ == NULL && ((Original).Raw) != NULL && (Original).Raw + (Original).Standard.Hdr->Length \ @@ -55,17 +55,10 @@ STATIC UINT32 mOriginalTableSize; (((Table)->CurrentPtr).Field) = SmbiosOverrideString ( \ (Table), \ RealValue__ != NULL ? RealValue__ : (Fallback), \ - (Index), \ - (Hex) \ + (Index) \ ); \ } while (0) -#define SMBIOS_OVERRIDE_S(Table, Field, Original, Value, Index, Fallback) \ - SMBIOS_OVERRIDE_STR ((Table), Field, (Original), (Value), (Index), (Fallback), FALSE) - -#define SMBIOS_OVERRIDE_H(Table, Field, Original, Value, Index, Fallback) \ - SMBIOS_OVERRIDE_STR ((Table), Field, (Original), (Value), (Index), (Fallback), TRUE) - #define SMBIOS_OVERRIDE_V(Table, Field, Original, Value, Fallback) \ do { \ if ((Value) != NULL) { \ diff --git a/TestsUser/Smbios/out.bin b/TestsUser/Smbios/out.bin deleted file mode 100644 index 64b3f4e7..00000000 Binary files a/TestsUser/Smbios/out.bin and /dev/null differ