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

Reply via email to