Reviewed-by: Jaben Carsey <[email protected]>
> -----Original Message----- > From: [email protected] [mailto:edk2-devel- > [email protected]] On Behalf Of [email protected] > Sent: Thursday, February 18, 2016 6:41 AM > To: [email protected] > Cc: Carsey, Jaben <[email protected]>; Qiu, Shumin > <[email protected]> > Subject: [edk2] [PATCH] ShellPkg: Add FileSize member to shell memory file > structure. > > ShellPkg: Add FileSize member to shell memory file structure. > > The shell uses the memory file structure to manage temporary files in > memory that support piping of output from one command into the the > input of another command. The BufferSize member is the size of the > internal buffer, not the size of the data that was written to the > file. So, it was possible to read beyond the EOF of these files as > reads used BufferSize. Now FileSize tracks the actual size of these > files (the number of bytes written, not the number of bytes available > in the buffer), and the reads use this member. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Jim Dailey <[email protected]> > --- > ShellPkg/Application/Shell/FileHandleWrappers.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/ShellPkg/Application/Shell/FileHandleWrappers.c > b/ShellPkg/Application/Shell/FileHandleWrappers.c > index ecad500..a9117be 100644 > --- a/ShellPkg/Application/Shell/FileHandleWrappers.c > +++ b/ShellPkg/Application/Shell/FileHandleWrappers.c > @@ -1325,6 +1325,7 @@ typedef struct { > UINT64 Position; > UINT64 BufferSize; > BOOLEAN Unicode; > + UINT64 FileSize; > } EFI_FILE_PROTOCOL_MEM; > > /** > @@ -1343,7 +1344,7 @@ FileInterfaceMemSetPosition( > OUT UINT64 Position > ) > { > - if (Position <= ((EFI_FILE_PROTOCOL_MEM*)This)->BufferSize) { > + if (Position <= ((EFI_FILE_PROTOCOL_MEM*)This)->FileSize) { > ((EFI_FILE_PROTOCOL_MEM*)This)->Position = Position; > return (EFI_SUCCESS); > } else { > @@ -1402,6 +1403,7 @@ FileInterfaceMemWrite( > } > CopyMem(((UINT8*)MemFile->Buffer) + MemFile->Position, Buffer, > *BufferSize); > MemFile->Position += (*BufferSize); > + MemFile->FileSize = MemFile->Position; > return (EFI_SUCCESS); > } else { > // > @@ -1418,6 +1420,7 @@ FileInterfaceMemWrite( > } > CopyMem(((UINT8*)MemFile->Buffer) + MemFile->Position, AsciiBuffer, > AsciiStrSize(AsciiBuffer)); > MemFile->Position += (*BufferSize / sizeof(CHAR16)); > + MemFile->FileSize = MemFile->Position; > FreePool(AsciiBuffer); > return (EFI_SUCCESS); > } > @@ -1443,8 +1446,8 @@ FileInterfaceMemRead( > EFI_FILE_PROTOCOL_MEM *MemFile; > > MemFile = (EFI_FILE_PROTOCOL_MEM *) This; > - if (*BufferSize > (UINTN)((MemFile->BufferSize) - (UINTN)(MemFile- > >Position))) { > - (*BufferSize) = (UINTN)((MemFile->BufferSize) - (UINTN)(MemFile- > >Position)); > + if (*BufferSize > (UINTN)((MemFile->FileSize) - > (UINTN)(MemFile->Position))) > { > + (*BufferSize) = (UINTN)((MemFile->FileSize) - > (UINTN)(MemFile->Position)); > } > CopyMem(Buffer, ((UINT8*)MemFile->Buffer) + MemFile->Position, > (*BufferSize)); > MemFile->Position = MemFile->Position + (*BufferSize); > -- > 2.7.1.windows.1 > > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

