<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, May 25, 2020 at 2:01 AM ivanhu <<a href="mailto:ivan.hu@canonical.com">ivan.hu@canonical.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
On 5/22/20 12:47 PM, Alex Hung wrote:<br>
> <br>
> <br>
> On Thu, May 21, 2020 at 9:01 PM ivanhu <<a href="mailto:ivan.hu@canonical.com" target="_blank">ivan.hu@canonical.com</a><br>
> <mailto:<a href="mailto:ivan.hu@canonical.com" target="_blank">ivan.hu@canonical.com</a>>> wrote:<br>
> <br>
> <br>
> <br>
>     On 5/16/20 2:00 AM, Alex Hung wrote:<br>
>     > This function checks if all elements are integers in a returned<br>
>     package.<br>
>     > This is one of common forms returned by ACPI methods.<br>
>     ><br>
>     > Signed-off-by: Alex Hung <<a href="mailto:alex.hung@canonical.com" target="_blank">alex.hung@canonical.com</a><br>
>     <mailto:<a href="mailto:alex.hung@canonical.com" target="_blank">alex.hung@canonical.com</a>>><br>
>     > ---<br>
>     >  src/lib/include/fwts_acpi_object_eval.h |  1 +<br>
>     >  src/lib/src/fwts_acpi_object_eval.c     | 28<br>
>     +++++++++++++++++++++++++<br>
>     >  2 files changed, 29 insertions(+)<br>
>     ><br>
>     > diff --git a/src/lib/include/fwts_acpi_object_eval.h<br>
>     b/src/lib/include/fwts_acpi_object_eval.h<br>
>     > index 09f3f754..92177857 100644<br>
>     > --- a/src/lib/include/fwts_acpi_object_eval.h<br>
>     > +++ b/src/lib/include/fwts_acpi_object_eval.h<br>
>     > @@ -128,6 +128,7 @@ void<br>
>     fwts_method_test_buffer_return(fwts_framework *fw, char *name,<br>
>     ACPI_BUFFER<br>
>     >  void fwts_method_test_all_reference_package_return(fwts_framework<br>
>     *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);<br>
>     >  void fwts_method_test_integer_reserved_bits_return(fwts_framework<br>
>     *fw, char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);<br>
>     >  void fwts_method_test_integer_max_return(fwts_framework *fw, char<br>
>     *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);<br>
>     > +void fwts_method_test_package_integer_return(fwts_framework *fw,<br>
>     char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);<br>
>     >  void fwts_method_test_passed_failed_return(fwts_framework *fw,<br>
>     char *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);<br>
>     >  void fwts_method_test_polling_return( fwts_framework *fw, char<br>
>     *name, ACPI_BUFFER *buf, ACPI_OBJECT *obj, void *private);<br>
>     > <br>
>     > diff --git a/src/lib/src/fwts_acpi_object_eval.c<br>
>     b/src/lib/src/fwts_acpi_object_eval.c<br>
>     > index 1e3575c9..613a6fd3 100644<br>
>     > --- a/src/lib/src/fwts_acpi_object_eval.c<br>
>     > +++ b/src/lib/src/fwts_acpi_object_eval.c<br>
>     > @@ -881,6 +881,34 @@ void fwts_method_test_integer_max_return(<br>
>     >               fwts_passed(fw, "%s correctly returned an integer.",<br>
>     name);<br>
>     >  }<br>
>     > <br>
>     > +/*<br>
>     > + *  fwts_method_test_package_integer_return<br>
>     > + *   check if all integers in a returned package<br>
>     > + */<br>
>     > +void fwts_method_test_package_integer_return(<br>
>     > +     fwts_framework *fw,<br>
>     > +     char *name,<br>
>     > +     ACPI_BUFFER *buf,<br>
>     > +     ACPI_OBJECT *obj,<br>
>     > +     void *private)<br>
>     > +{<br>
>     > +     char method[4];<br>
> <br>
>     Should this be method[5], include the null-terminated?<br>
> <br>
> <br>
> It seems ACPI names aren't exactly strings. I checked acpica code and it<br>
> uses 4 chars like below:<br>
> /*******************************************************************************<br>
>  *<br>
>  * FUNCTION:    AcpiDmDumpName<br>
>  *<br>
>  * PARAMETERS:  Name            - 4 character ACPI name<br>
>  *<br>
>  * RETURN:      Final length of name<br>
>  *<br>
>  * DESCRIPTION: Dump an ACPI name, minus any trailing underscores.<br>
>  *<br>
>  ******************************************************************************/<br>
> <br>
> UINT32<br>
> AcpiDmDumpName (<br>
>     UINT32                  Name)<br>
> {<br>
>     UINT32                  i;<br>
>     UINT32                  Length;<br>
>     char                    NewName[4];<br>
> <br>
> // ... skipped<br>
> <br>
> In other cases, it can also use 5 chars like "AcpiName" variable in the<br>
> function "AcpiDbFindNameInNamespace" (although its parameter takes a<br>
> 4-char string)<br>
> <br>
> I think both would work when passing to AML parser.<br>
> <br>
><br>
OK. but I think we should make sure if those non null-terminated string<br>
have any potential issue, since they will be passed to the result log<br>
functions.<br></blockquote><div><br></div><div><div style="font-family:verdana,sans-serif" class="gmail_default">V2 was sent for reviews.</div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
>  <br>
> <br>
>     > +     uint32_t *element_size = (uint32_t *) private;<br>
>     > +<br>
>     > +     memcpy(method, &name[strlen(name) - 4], 4);<br>
>     > +<br>
>     > +     if (fwts_method_check_type(fw, name, buf, ACPI_TYPE_PACKAGE)<br>
>     != FWTS_OK)<br>
>     > +             return;<br>
>     > +<br>
>     > +     if (fwts_method_package_count_equal(fw, name, method, obj,<br>
>     *element_size) != FWTS_OK)<br>
>     > +             return;<br>
>     > +<br>
>     > +     if (fwts_method_package_elements_all_type(fw, name, method,<br>
>     obj, ACPI_TYPE_INTEGER) != FWTS_OK)<br>
>     > +             return;<br>
>     > +<br>
>     > +     fwts_method_passed_sane(fw, name, "package");<br>
>     > +}<br>
>     > +<br>
>     >  /*<br>
>     >   *  fwts_method_test_passed_failed_return<br>
>     >   *   check if 0 or 1 (false/true) integer is returned<br>
>     ><br>
> <br>
>     -- <br>
>     fwts-devel mailing list<br>
>     <a href="mailto:fwts-devel@lists.ubuntu.com" target="_blank">fwts-devel@lists.ubuntu.com</a> <mailto:<a href="mailto:fwts-devel@lists.ubuntu.com" target="_blank">fwts-devel@lists.ubuntu.com</a>><br>
>     Modify settings or unsubscribe at:<br>
>     <a href="https://lists.ubuntu.com/mailman/listinfo/fwts-devel" rel="noreferrer" target="_blank">https://lists.ubuntu.com/mailman/listinfo/fwts-devel</a><br>
> <br>
> <br>
> <br>
> -- <br>
> Cheers,<br>
> Alex Hung<br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">Cheers,<br>Alex Hung<br></div></div></div>