[Bf-blender-cvs] [9b86741ae75] master: FIx possible return of string without null character

Germano Cavalcante noreply at git.blender.org
Wed Feb 1 19:31:03 CET 2023


Commit: 9b86741ae75ff6c697088b01773f94899f49ec10
Author: Germano Cavalcante
Date:   Wed Feb 1 15:29:21 2023 -0300
Branches: master
https://developer.blender.org/rB9b86741ae75ff6c697088b01773f94899f49ec10

FIx possible return of string without null character

`WM_modalkeymap_items_to_string` is expected to always return a string.

But in the special case of zero length, the returned string was not
terminated with `'\0'`.

This can cause problems with the header of the knife tool for example.
It always uses the returned string.

(This issue was observed when investigating T103804).

===================================================================

M	source/blender/windowmanager/intern/wm_keymap.c

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index 9e322228884..f033a5d9970 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -1238,25 +1238,26 @@ int WM_modalkeymap_items_to_string(const wmKeyMap *km,
                                    char *result,
                                    const int result_len)
 {
+  BLI_assert(result_len > 0);
+
+  const wmKeyMapItem *kmi;
+  if (km == NULL || (kmi = WM_modalkeymap_find_propvalue(km, propvalue)) == NULL) {
+    *result = '\0';
+    return 0;
+  }
+
   int totlen = 0;
-  bool add_sep = false;
+  do {
+    totlen += WM_keymap_item_to_string(kmi, compact, &result[totlen], result_len - totlen);
 
-  if (km) {
-    const wmKeyMapItem *kmi;
-
-    /* Find all shortcuts related to that propvalue! */
-    for (kmi = WM_modalkeymap_find_propvalue(km, propvalue); kmi && totlen < (result_len - 2);
-         kmi = wm_modalkeymap_find_propvalue_iter(km, kmi, propvalue)) {
-      if (add_sep) {
-        result[totlen++] = '/';
-        result[totlen] = '\0';
-      }
-      else {
-        add_sep = true;
-      }
-      totlen += WM_keymap_item_to_string(kmi, compact, &result[totlen], result_len - totlen);
+    if ((kmi = wm_modalkeymap_find_propvalue_iter(km, kmi, propvalue)) == NULL ||
+        totlen >= (result_len - 2)) {
+      break;
     }
-  }
+
+    result[totlen++] = '/';
+    result[totlen] = '\0';
+  } while (true);
 
   return totlen;
 }



More information about the Bf-blender-cvs mailing list