\r
Print(L"Arguments to pass to the binary: ");\r
if (CmdLineSize > 0) {\r
- AsciiStrnCpy(CmdLine, (CONST CHAR8*)(LinuxArguments + 1), CmdLineSize);\r
+ AsciiStrnCpy (CmdLine, (CONST CHAR8*)(LinuxArguments + 1), sizeof (CmdLine));\r
+ CmdLine[sizeof (CmdLine) - 1] = '\0';\r
} else {\r
CmdLine[0] = '\0';\r
}\r
if (BootOption->OptionalDataSize > 0) {\r
IsPrintable = IsPrintableString (BootOption->OptionalData, &IsUnicode);\r
if (IsPrintable) {\r
+ //\r
+ // The size in bytes of the string, final zero included, should\r
+ // be equal to or at least lower than "BootOption->OptionalDataSize"\r
+ // and the "IsPrintableString()" has already tested that the length\r
+ // in number of characters is smaller than BOOT_DEVICE_OPTION_MAX,\r
+ // final '\0' included. We can thus copy the string for editing\r
+ // using "CopyMem()". Furthermore, note that in the case of an Unicode\r
+ // string "StrnCpy()" and "StrCpy()" can not be used to copy the\r
+ // string because the data pointed to by "BootOption->OptionalData"\r
+ // is not necessarily 2-byte aligned.\r
+ //\r
if (IsUnicode) {\r
- StrnCpy (UnicodeCmdLine, BootOption->OptionalData, BootOption->OptionalDataSize / 2);\r
+ CopyMem (\r
+ UnicodeCmdLine, BootOption->OptionalData,\r
+ MIN (sizeof (UnicodeCmdLine),\r
+ BootOption->OptionalDataSize)\r
+ );\r
} else {\r
- AsciiStrnCpy (CmdLine, BootOption->OptionalData, BootOption->OptionalDataSize);\r
+ CopyMem (\r
+ CmdLine, BootOption->OptionalData,\r
+ MIN (sizeof (CmdLine),\r
+ BootOption->OptionalDataSize)\r
+ );\r
}\r
}\r
} else {\r