Reviewed-by: Jaben Carsey <jaben.car...@intel.com> > -----Original Message----- > From: Kinney, Michael D > Sent: Friday, December 11, 2015 1:24 PM > To: edk2-devel@lists.01.org > Cc: Carsey, Jaben <jaben.car...@intel.com> > Subject: [PATCH] ShellPkg/Shell - Fix ASSERT() when FvSimpleFileSystemDxe is > used > Importance: High > > When the FvSimpleFileSystemDxe module is included in a platform, > Simple File System Protocols are produced for firmware volumes(FV) > that do not have the same style device paths as file systems with > file names. The ShellPkg has an assumption that the device path > contains device path nodes of type MEDIA_FILEPATH_DP and generates > an ASSERT() if any other device path nodes are encountered. This > change removes the ASSERT() condition and instead returns NULL that > means EfiShellGetFilePathFromDevicePath() can not convert the > device path nodes that represent the file path to a Unicode string. > > Cc: Jaben Carsey <jaben.car...@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Michael Kinney <michael.d.kin...@intel.com> > --- > ShellPkg/Application/Shell/ShellProtocol.c | 51 +++++++++++++++-------------- > - > 1 file changed, 25 insertions(+), 26 deletions(-) > > diff --git a/ShellPkg/Application/Shell/ShellProtocol.c > b/ShellPkg/Application/Shell/ShellProtocol.c > index 9c370cc..def3bd3 100644 > --- a/ShellPkg/Application/Shell/ShellProtocol.c > +++ b/ShellPkg/Application/Shell/ShellProtocol.c > @@ -449,38 +449,37 @@ EfiShellGetFilePathFromDevicePath( > ; FilePath = (FILEPATH_DEVICE_PATH*)NextDevicePathNode (&FilePath- > >Header) > ){ > // > - // all the rest should be file path nodes > + // If any node is not a file path node, then the conversion can not > be > completed > // > if ((DevicePathType(&FilePath->Header) != MEDIA_DEVICE_PATH) || > (DevicePathSubType(&FilePath->Header) != MEDIA_FILEPATH_DP)) { > FreePool(PathForReturn); > - PathForReturn = NULL; > - ASSERT(FALSE); > - } else { > - // > - // append the path part onto the filepath. > - // > - ASSERT((PathForReturn == NULL && PathSize == 0) || (PathForReturn > != NULL)); > - > - AlignedNode = AllocateCopyPool (DevicePathNodeLength(FilePath), > FilePath); > - ASSERT (AlignedNode != NULL); > - > - // File Path Device Path Nodes 'can optionally add a "\" separator > to > - // the beginning and/or the end of the Path Name string.' > - // (UEFI Spec 2.4 section 9.3.6.4). > - // If necessary, add a "\", but otherwise don't > - // (This is specified in the above section, and also implied by the > - // UEFI Shell spec section 3.7) > - if ((PathSize != 0) && > - (PathForReturn != NULL) && > - (PathForReturn[PathSize - 1] != L'\\') && > - (AlignedNode->PathName[0] != L'\\')) { > - PathForReturn = StrnCatGrow (&PathForReturn, &PathSize, L"\\", > 1); > - } > + return NULL; > + } > > - PathForReturn = StrnCatGrow(&PathForReturn, &PathSize, > AlignedNode->PathName, 0); > - FreePool(AlignedNode); > + // > + // append the path part onto the filepath. > + // > + ASSERT((PathForReturn == NULL && PathSize == 0) || (PathForReturn != > NULL)); > + > + AlignedNode = AllocateCopyPool (DevicePathNodeLength(FilePath), > FilePath); > + ASSERT (AlignedNode != NULL); > + > + // File Path Device Path Nodes 'can optionally add a "\" separator to > + // the beginning and/or the end of the Path Name string.' > + // (UEFI Spec 2.4 section 9.3.6.4). > + // If necessary, add a "\", but otherwise don't > + // (This is specified in the above section, and also implied by the > + // UEFI Shell spec section 3.7) > + if ((PathSize != 0) && > + (PathForReturn != NULL) && > + (PathForReturn[PathSize - 1] != L'\\') && > + (AlignedNode->PathName[0] != L'\\')) { > + PathForReturn = StrnCatGrow (&PathForReturn, &PathSize, L"\\", 1); > } > + > + PathForReturn = StrnCatGrow(&PathForReturn, &PathSize, > AlignedNode->PathName, 0); > + FreePool(AlignedNode); > } // for loop of remaining nodes > } > if (PathForReturn != NULL) { > -- > 2.6.3.windows.1
_______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel