<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>