Skip to content

Commit 61b2225

Browse files
committed
[CHERRY-PICK] ShellPkg: Prevent memcpy intrinsics in VS22 (17.14.2)
The latest VS2022 update replaces some code patterns with struct assignments with `memcpy`. This change convert the code to explicitly use `CopyMem`. Signed-off-by: Michael Kubacki <[email protected]> (cherry picked from commit a9d304f)
1 parent 74db1d7 commit 61b2225

File tree

2 files changed

+15
-30
lines changed

2 files changed

+15
-30
lines changed

ShellPkg/Library/UefiShellDebug1CommandsLib/Edit/FileBuffer.c

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ FileBufferPrintLine (
478478
{
479479
CHAR16 *Buffer;
480480
UINTN Limit;
481+
UINTN PadLength;
481482
CHAR16 *PrintLine;
482483
CHAR16 *PrintLine2;
483484
UINTN BufLen;
@@ -496,8 +497,9 @@ FileBufferPrintLine (
496497
PrintLine = AllocatePool (BufLen);
497498
if (PrintLine != NULL) {
498499
StrnCpyS (PrintLine, BufLen/sizeof (CHAR16), Buffer, MIN (Limit, MainEditor.ScreenSize.Column));
499-
for (Limit = StrLen (PrintLine); Limit < MainEditor.ScreenSize.Column; Limit++) {
500-
PrintLine[Limit] = L' ';
500+
if (StrLen (PrintLine) < MainEditor.ScreenSize.Column) {
501+
PadLength = MainEditor.ScreenSize.Column - StrLen (PrintLine);
502+
SetMem16 (&PrintLine[StrLen (PrintLine)], PadLength * sizeof (CHAR16), L' ');
501503
}
502504

503505
PrintLine[MainEditor.ScreenSize.Column] = CHAR_NULL;
@@ -3104,17 +3106,13 @@ FileBufferReplace (
31043106
// set replace into it
31053107
//
31063108
Buffer = FileBuffer.CurrentLine->Buffer + FileBuffer.FilePosition.Column - 1;
3107-
for (Index = 0; Index < ReplaceLen; Index++) {
3108-
Buffer[Index] = Replace[Index];
3109-
}
3109+
CopyMem (Buffer, Replace, ReplaceLen * sizeof (CHAR16));
31103110
}
31113111

31123112
if (ReplaceLen < SearchLen) {
31133113
Buffer = FileBuffer.CurrentLine->Buffer + FileBuffer.FilePosition.Column - 1;
31143114

3115-
for (Index = 0; Index < ReplaceLen; Index++) {
3116-
Buffer[Index] = Replace[Index];
3117-
}
3115+
CopyMem (Buffer, Replace, ReplaceLen * sizeof (CHAR16));
31183116

31193117
Buffer += ReplaceLen;
31203118
Gap = SearchLen - ReplaceLen;
@@ -3130,9 +3128,7 @@ FileBufferReplace (
31303128

31313129
if (ReplaceLen == SearchLen) {
31323130
Buffer = FileBuffer.CurrentLine->Buffer + FileBuffer.FilePosition.Column - 1;
3133-
for (Index = 0; Index < ReplaceLen; Index++) {
3134-
Buffer[Index] = Replace[Index];
3135-
}
3131+
CopyMem (Buffer, Replace, ReplaceLen * sizeof (CHAR16));
31363132
}
31373133

31383134
FileBuffer.CurrentLine->Size += (ReplaceLen - SearchLen);
@@ -3322,9 +3318,7 @@ FileBufferReplaceAll (
33223318
// set replace into it
33233319
//
33243320
Buffer = Line->Buffer + Position;
3325-
for (Index = 0; Index < ReplaceLen; Index++) {
3326-
Buffer[Index] = ReplaceStr[Index];
3327-
}
3321+
CopyMem (Buffer, ReplaceStr, ReplaceLen * sizeof (CHAR16));
33283322

33293323
Line->Size += (ReplaceLen - SearchLen);
33303324
Column += ReplaceLen;

ShellPkg/Library/UefiShellDebug1CommandsLib/HexEdit/BufferImage.c

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,8 @@ HBufferImageBackup (
142142
VOID
143143
)
144144
{
145-
HBufferImageBackupVar.MousePosition = HBufferImage.MousePosition;
146-
147-
HBufferImageBackupVar.BufferPosition = HBufferImage.BufferPosition;
145+
CopyMem (&HBufferImageBackupVar.MousePosition, &HBufferImage.MousePosition, sizeof (HBufferImage.MousePosition));
146+
CopyMem (&HBufferImageBackupVar.BufferPosition, &HBufferImage.BufferPosition, sizeof (HBufferImage.BufferPosition));
148147

149148
HBufferImageBackupVar.Modified = HBufferImage.Modified;
150149

@@ -569,7 +568,7 @@ HBufferImageRestoreMousePosition (
569568
//
570569
// backup the old screen attributes
571570
//
572-
Orig = HMainEditor.ColorAttributes;
571+
CopyMem (&Orig, &HMainEditor.ColorAttributes, sizeof (Orig));
573572
New.Data = 0;
574573
New.Colors.Foreground = Orig.Colors.Background & 0xF;
575574
New.Colors.Background = Orig.Colors.Foreground & 0x7;
@@ -1955,17 +1954,13 @@ HBufferImageDeleteCharacterFromBuffer (
19551954
// pass deleted buffer out
19561955
//
19571956
if (DeleteBuffer != NULL) {
1958-
for (Index = 0; Index < Count; Index++) {
1959-
DeleteBuffer[Index] = BufferPtr[Pos + Index];
1960-
}
1957+
CopyMem (&DeleteBuffer[0], &BufferPtr[Pos], Count);
19611958
}
19621959

19631960
//
19641961
// delete the part from Pos
19651962
//
1966-
for (Index = Pos; Index < Size - Count; Index++) {
1967-
BufferPtr[Index] = BufferPtr[Index + Count];
1968-
}
1963+
CopyMem (&BufferPtr[Pos], &BufferPtr[Pos + Count], Size - Count - Pos);
19691964

19701965
Size -= Count;
19711966

@@ -2069,16 +2064,12 @@ HBufferImageAddCharacterToBuffer (
20692064
//
20702065
// get a place to add
20712066
//
2072-
for (Index = (INTN)(Size + Count - 1); Index >= (INTN)Pos; Index--) {
2073-
BufferPtr[Index] = BufferPtr[Index - Count];
2074-
}
2067+
CopyMem (&BufferPtr[Pos], &BufferPtr[Pos - Count], Size - Pos + Count);
20752068

20762069
//
20772070
// add the buffer
20782071
//
2079-
for (Index = (INTN)0; Index < (INTN)Count; Index++) {
2080-
BufferPtr[Index + Pos] = AddBuffer[Index];
2081-
}
2072+
CopyMem (&BufferPtr[Pos], AddBuffer, Count);
20822073

20832074
Size += Count;
20842075

0 commit comments

Comments
 (0)