ACPICA: iASL: Return exceptions for string-to-integer conversions
authorBob Moore <robert.moore@intel.com>
Thu, 8 Oct 2020 02:54:00 +0000 (19:54 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 8 Oct 2020 16:03:55 +0000 (18:03 +0200)
This allows iASL to generate errors by passing exceptions that may be
encountered during string-to-integer conversions. The exceptions
point out invalid hex, decimal, and octal integers.

ACPICA commit e98b8c0a3d96fdabb167c0ef18a809b32ade3228

Link: https://github.com/acpica/acpica/commit/e98b8c0a
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Erik Kaneda <erik.kaneda@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/acpica/utstrsuppt.c
include/acpi/acexcep.h

index 05ff200..2d91003 100644 (file)
@@ -45,10 +45,15 @@ acpi_status acpi_ut_convert_octal_string(char *string, u64 *return_value_ptr)
        /* Convert each ASCII byte in the input string */
 
        while (*string) {
-
-               /* Character must be ASCII 0-7, otherwise terminate with no error */
-
+               /*
+                * Character must be ASCII 0-7, otherwise:
+                * 1) Runtime: terminate with no error, per the ACPI spec
+                * 2) Compiler: return an error
+                */
                if (!(ACPI_IS_OCTAL_DIGIT(*string))) {
+#ifdef ACPI_ASL_COMPILER
+                       status = AE_BAD_OCTAL_CONSTANT;
+#endif
                        break;
                }
 
@@ -94,10 +99,15 @@ acpi_status acpi_ut_convert_decimal_string(char *string, u64 *return_value_ptr)
        /* Convert each ASCII byte in the input string */
 
        while (*string) {
-
-               /* Character must be ASCII 0-9, otherwise terminate with no error */
-
+               /*
+                * Character must be ASCII 0-9, otherwise:
+                * 1) Runtime: terminate with no error, per the ACPI spec
+                * 2) Compiler: return an error
+                */
                if (!isdigit(*string)) {
+#ifdef ACPI_ASL_COMPILER
+                       status = AE_BAD_DECIMAL_CONSTANT;
+#endif
                        break;
                }
 
@@ -143,10 +153,15 @@ acpi_status acpi_ut_convert_hex_string(char *string, u64 *return_value_ptr)
        /* Convert each ASCII byte in the input string */
 
        while (*string) {
-
-               /* Must be ASCII A-F, a-f, or 0-9, otherwise terminate with no error */
-
+               /*
+                * Character must be ASCII A-F, a-f, or 0-9, otherwise:
+                * 1) Runtime: terminate with no error, per the ACPI spec
+                * 2) Compiler: return an error
+                */
                if (!isxdigit(*string)) {
+#ifdef ACPI_ASL_COMPILER
+                       status = AE_BAD_HEX_CONSTANT;
+#endif
                        break;
                }
 
index 436cd14..2fc624a 100644 (file)
 struct acpi_exception_info {
        char *name;
 
-#ifdef ACPI_HELP_APP
+#if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER)
        char *description;
 #endif
 };
 
-#ifdef ACPI_HELP_APP
+#if defined (ACPI_HELP_APP) || defined (ACPI_ASL_COMPILER)
 #define EXCEP_TXT(name,description)     {name, description}
 #else
 #define EXCEP_TXT(name,description)     {name}