No apologies necessary! Raising compatibility concerns is very valid. As I said, I just wanted to provide some other considerations I saw to weigh in the decision.
All the best, Jonathan On 07/05/2019 22:02, Tim Lewis wrote: > Jonathan -- > > My apologies. I jumped because we've been bitten by shell "clarifications" in > the past. > > As you've probably read in the other thread, it turns out that I (we) > actually did agree with your interpretation of the spec in our alternate > implementation and have been using it that way for 2+ years. And it didn't > cause us grief with our other product which does use an EDK2-derived shell. > > Best regards, > Tim > > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Jonathan Watt > Sent: Tuesday, May 7, 2019 1:51 PM > To: Tim Lewis <tim.le...@insyde.com>; 'Carsey, Jaben' > <jaben.car...@intel.com>; devel@edk2.groups.io; 'Gao, Zhichao' > <zhichao....@intel.com>; 'Ni, Ray' <ray...@intel.com> > Cc: 'Bi, Dandan' <dandan...@intel.com> > Subject: Re: [edk2-devel] [PATCH v1 1/1] ShellPkg/UefiShellBcfgCommandLib: > Fix '-opt' option > > Hi Tim, > > For context, I'm just some random guy who tripped over this issue on his home > workstation and thought he'd try and remove the footgun to save anyone else > the same pain. I was specifically replying to the unconditional statement "It > will break existing scripts." (not made by you) to provide what I hope was > some qualification and balance to the face value of that statement, and to > suggest some other things that should be considered. As far as deciding what > the best resolution is, I'm not qualified for that. > > I am curious about one thing though. The sentence you wrote that ends with > "that are implemented to the specification" sounds like you're saying making > the proposed change would violate the specification. That does not seem to be > the case from my reading, and my reading would be that it would actually make > it do what most people would expect from reading the specification. > > Specifically, the usage block for bcfg in the specification says: > > Usage: > bcfg driver|boot [dump [-v]] > bcfg driver|boot [add # file "desc"] [addp # file “desc”] > [addh # handle “desc”] > bcfg driver|boot [rm #] > bcfg driver|boot [mv # #] > bcfg driver|boot [mod # “desc”] | [modf # file] | [modp # file] | > [modh # handle] > bcfg driver|boot [-opt # [[filename]|[”data”]] | > [KeyData <ScanCode UnicodeChar>*]] > > It seems natural to assume from that that the "#" for all options is the > "same thing" and would be handled the same way. > > The comment for the -opt option does not indicate otherwise: > > -opt > Modify the optional data associated with a driver or boot option. > Followed either by the filename of the file which contains the > binary data to be associated with the driver or boot option > optional data, or else the quote-delimited data that will be > associated with the driver or boot option optional data. > > In fact the use of the term "driver or boot option" for -opt and the other > options indicates that it is the same thing as for the other options (which > explicitly say that the "#" is a hexadecimal number), even if "#" isn't > described explicitly in this case. > > I'm glad to hear there are other implementations, because given the > disagreement over what the spec intends, it would be useful to compare them > and consider converging. > > Anyway, that's probably enough from me. :) > > Jonathan > > On 07/05/2019 21:04, Tim Lewis wrote: >> Jonathan -- >> >> The bcfg command pre-dates the UEFI shell specification. I know of at least >> two non-EDK2 implementations, including one maintained by my company, that >> are implemented to the specification. Server platforms that use the >> "application" style boot options can regularly run over 10 options. >> >> I believe the better alternative is to add a new option in the >> specification and leave the existing syntax for -opt. >> >> Thanks, >> >> Tim >> >> -----Original Message----- >> From: Jonathan Watt <jw...@jwatt.org> >> Sent: Tuesday, May 7, 2019 12:06 PM >> To: Carsey, Jaben <jaben.car...@intel.com>; devel@edk2.groups.io; >> tim.le...@insyde.com; Gao, Zhichao <zhichao....@intel.com>; Ni, Ray >> <ray...@intel.com> >> Cc: Bi, Dandan <dandan...@intel.com> >> Subject: Re: [edk2-devel] [PATCH v1 1/1] >> ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option >> >> I should add, for me personally, once I noticed the inconsistency I changed >> my scripts to use the "0x" prefix to avoid this real footgun. I imagine that >> anyone else that may have encountered this would have done the same and so, >> like me, wouldn't be affected by the change if it were to happen. >> >> On 07/05/2019 20:00, Jonathan Watt wrote: >>> There is potential for that, but it's not certain. For it to happen >>> scripts would need to be both omitting the "0x" prefix and be pass an >>> option number greater than 9. The fact this very unexpected >>> inconsistency (which will corrupt the wrong option when those same >>> two things are true!) hasn't been reported before would seem to >>> indicate this combination doesn't really happen/is rare in practice. >>> >>> Also, is TianoCore's bcfg the only implementation people are using? >>> If there are other implementations, would this bring TianoCore's >>> implementation into or out of line with them? That may impact whether the >>> spec could/should change. >>> >>> On 07/05/2019 18:40, Carsey, Jaben wrote: >>>> It will break existing scripts. Do you have such scripts in your >>>> environment dependent on this parameter? >>>> >>>>> -----Original Message----- >>>>> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf >>>>> Of Tim Lewis >>>>> Sent: Tuesday, May 07, 2019 9:20 AM >>>>> To: devel@edk2.groups.io; Carsey, Jaben <jaben.car...@intel.com>; >>>>> Gao, Zhichao <zhichao....@intel.com>; Ni, Ray <ray...@intel.com>; >>>>> jw...@jwatt.org >>>>> Cc: Bi, Dandan <dandan...@intel.com> >>>>> Subject: Re: [edk2-devel] [PATCH v1 1/1] >>>>> ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option >>>>> Importance: High >>>>> >>>>> The question is whether this will break compatibility with existing >>>>> shell scripts. In order to maintain that compatibility, it may be >>>>> necessary to add a new option rather than trying to update an existing >>>>> one. >>>>> >>>>> Tim >>>>> >>>>> -----Original Message----- >>>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of >>>>> Carsey, Jaben >>>>> Sent: Tuesday, May 7, 2019 7:36 AM >>>>> To: Gao, Zhichao <zhichao....@intel.com>; devel@edk2.groups.io; Ni, >>>>> Ray <ray...@intel.com>; jw...@jwatt.org >>>>> Cc: Bi, Dandan <dandan...@intel.com> >>>>> Subject: Re: [edk2-devel] [PATCH v1 1/1] >>>>> ShellPkg/UefiShellBcfgCommandLib: >>>>> Fix '-opt' option >>>>> >>>>> Zhichao, >>>>> I can help submit errata for shell spec if needed. >>>>> >>>>> Per patch, >>>>> I agree. This looks good. >>>>> Reviewed-by: Jaben Carsey <jaben.car...@intel.com> >>>>> >>>>> >>>>>> -----Original Message----- >>>>>> From: Gao, Zhichao >>>>>> Sent: Tuesday, May 07, 2019 2:52 AM >>>>>> To: devel@edk2.groups.io; Ni, Ray <ray...@intel.com>; >>>>>> jw...@jwatt.org >>>>>> Cc: Carsey, Jaben <jaben.car...@intel.com>; Bi, Dandan >>>>>> <dandan...@intel.com> >>>>>> Subject: RE: [edk2-devel] [PATCH v1 1/1] >>>>>> ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' option >>>>>> Importance: High >>>>>> >>>>>> This patch looks good for me. >>>>>> Reviewed-by: Zhichao Gao <zhichao....@intel.com> >>>>>> >>>>>> But when I view the command in UEFI SHELL 2.2 spec: >>>>>> ... >>>>>> bcfg driver|boot [-opt # [[filename]|["data"]] | [KeyData >>>>>> <ScanCode >>>>>> UnicodeChar>*]] >>>>>> ... >>>>>> -opt >>>>>> Modify the optional data associated with a driver or boot option. >>>>>> Followed either by the filename of the file which contains the >>>>>> binary data to be associated with the driver or boot option >>>>>> optional data, or else the quote- delimited data that will be >>>>>> associated with the driver or boot option optional data. >>>>>> ... >>>>>> >>>>>> This description lack the comment of '#' parameter and that may >>>>>> make the consumer confused. Usually consumers would regard it as >>>>>> the same in other option, such as ' bcfg driver|boot [rm #]'. The >>>>>> '#' is clearly descripted as a hexadecimal parameter: >>>>>> rm >>>>>> Remove an option. The # parameter lists the option number to >>>>>> remove in hexadecimal. >>>>>> >>>>>> So I think we should update the shell spec by the way. >>>>>> >>>>>> Thanks, >>>>>> Zhichao >>>>>> >>>>>>> -----Original Message----- >>>>>>> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On >>>>>>> Behalf Of >>>>>> Ni, >>>>>>> Ray >>>>>>> Sent: Monday, May 6, 2019 10:02 PM >>>>>>> To: jw...@jwatt.org; devel@edk2.groups.io >>>>>>> Cc: Carsey, Jaben <jaben.car...@intel.com>; Bi, Dandan >>>>>>> <dandan...@intel.com> >>>>>>> Subject: Re: [edk2-devel] [PATCH v1 1/1] >>>>>> ShellPkg/UefiShellBcfgCommandLib: >>>>>>> Fix '-opt' option >>>>>>> >>>>>>> Dandan, >>>>>>> Can you please help to review? >>>>>>> >>>>>>> Thanks, >>>>>>> Ray >>>>>>> >>>>>>>> -----Original Message----- >>>>>>>> From: jw...@jwatt.org [mailto:jw...@jwatt.org] >>>>>>>> Sent: Monday, May 6, 2019 9:03 PM >>>>>>>> To: devel@edk2.groups.io >>>>>>>> Cc: Carsey, Jaben <jaben.car...@intel.com>; Ni, Ray >>>>>>>> <ray...@intel.com> >>>>>>>> Subject: [PATCH v1 1/1] ShellPkg/UefiShellBcfgCommandLib: Fix '-opt' >>>>>>>> option >>>>>>>> >>>>>>>> From: Jonathan Watt <jw...@jwatt.org> >>>>>>>> >>>>>>>> For all other bcfg commands the "#" (option number) argument(s) >>>>>>>> are treated as hexedecimal values regardless of whether or not >>>>>>>> they are prefixed by "0x". This change fixes '-opt' to handle its "#" >>>>>>>> (option number) argument consistently with the other commands. >>>>>>>> >>>>>>>> Making this change removes a potential footgun whereby a user >>>>>>>> that has been using a number without a "0x" prefix with other >>>>>>>> bcfg commands finds that, on using that exact same number with >>>>>>>> '-opt', it has this time unexpectedly been interpreted as a >>>>>>>> decimal number and they have modified >>>>>>>> (corrupted) an unrelated load option. For example, a user may >>>>>>>> have been specifying "10" to other commands to have them act on >>>>>>>> the 16th option (because simply "10", without any prefix, is how >>>>>>>> 'bcfg boot dump' displayed the option number for the 16th option). >>>>>>>> Unfortunately for them, if they also use '-opt' with "10" it >>>>>>>> would unexpectedly and inconsistently act on the 10th option. >>>>>>>> >>>>>>>> CC: Jaben Carsey <jaben.car...@intel.com> >>>>>>>> CC: Ray Ni <ray...@intel.com> >>>>>>>> Signed-off-by: Jonathan Watt <jw...@jwatt.org> >>>>>>>> --- >>>>>>>> >>>>>>>> >>>>> ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.c >>>>>> | >>>>>>>> 2 >>>>>>>> +- >>>>>>>> 1 file changed, 1 insertion(+), 1 deletion(-) >>>>>>>> >>>>>>>> diff --git >>>>>>>> >>>>>> a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib. >>>>>> c >>>>>>>> >>>>>> b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib. >>>>>> c >>>>>>>> index d033c7c1dc59..e8b48b4990dd 100644 >>>>>>>> --- >>>>>>>> >>>>>> a/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib. >>>>>> c >>>>>>>> +++ >>>>>>>> >>>>>> b/ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib. >>>>>> c >>>>>>>> @@ -1019,7 +1019,7 @@ BcfgAddOpt( >>>>>>>> // >>>>>>>> // Get the index of the variable we are changing. >>>>>>>> // >>>>>>>> - Status = ShellConvertStringToUint64(Walker, &Intermediate, >>>>>>>> FALSE, TRUE); >>>>>>>> + Status = ShellConvertStringToUint64(Walker, &Intermediate, >>>>>>>> + TRUE, TRUE); >>>>>>>> if (EFI_ERROR(Status) || (((UINT16)Intermediate) != >>>>>>>> Intermediate) >>>>>>>> || StrStr(Walker, L" ") == NULL || ((UINT16)Intermediate) > >>>>>>>> ((UINT16)OrderCount)) { >>>>>>>> ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN >>>>>>>> (STR_GEN_PARAM_INV), gShellBcfgHiiHandle, L"bcfg", L"Option >>>>> Index"); >>>>>>>> ShellStatus = SHELL_INVALID_PARAMETER; >>>>>>>> -- >>>>>>>> 2.21.0 >>>>>>> >>>>>>> >>>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> >>> >> >> >> > > > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#40142): https://edk2.groups.io/g/devel/message/40142 Mute This Topic: https://groups.io/mt/31520134/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-