Fix comparison of two identical UUID strings ending with dash '-'.

In this case grub_uuidcasecmp() passes through the null terminators
and actual result depends on whatever garbage follows them.

So break immediately when it reaches the end in any of the strings
after a dash character '-'.

Signed-off-by: Vitaly Kuzmichev <vitaly.kuzmic...@rtsoft.de>
---
 include/grub/misc.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/grub/misc.h b/include/grub/misc.h
index 1b35a167f..12fade5de 100644
--- a/include/grub/misc.h
+++ b/include/grub/misc.h
@@ -264,7 +264,8 @@ grub_uuidcasecmp (const char *uuid1, const char *uuid2, 
grub_size_t n)
       while ('-' == *uuid2)
         ++uuid2;
 
-      if (grub_tolower ((grub_uint8_t) *uuid1) != grub_tolower ((grub_uint8_t) 
*uuid2))
+      if (!*uuid1 || !*uuid2 ||
+         grub_tolower ((grub_uint8_t) *uuid1) != grub_tolower ((grub_uint8_t) 
*uuid2))
        break;
 
       uuid1++;
-- 
2.34.1


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to