Browse Source

fix: reject task append to JumpList when description exceeds 260 characters (#28485)

* fix: reject task when description exceeds 260 characters

* Switched out wcslen() for size() [linear -> constant time]

* Included comment describing the need for the additional check

* Added information about character limit to documentation

* Added newline character to end of jump-list-category.md
SushiJackal 4 years ago
parent
commit
82ea8ea68c

+ 4 - 0
docs/api/app.md

@@ -871,6 +871,10 @@ re-add a removed item to a custom category earlier than that will result in the
 entire custom category being omitted from the Jump List. The list of removed
 items can be obtained using `app.getJumpListSettings()`.
 
+**Note:** The maximum length of a Jump List item's `description` property is
+260 characters. Beyond this limit, the item will not be added to the Jump
+List, nor will it be displayed.
+
 Here's a very simple example of creating a custom Jump List:
 
 ```javascript

+ 4 - 0
docs/api/structures/jump-list-category.md

@@ -19,3 +19,7 @@
 property set then its `type` is assumed to be `tasks`. If the `name` property
 is set but the `type` property is omitted then the `type` is assumed to be
 `custom`.
+
+**Note:** The maximum length of a Jump List item's `description` property is
+260 characters. Beyond this limit, the item will not be added to the Jump
+List, nor will it be displayed.

+ 1 - 1
docs/api/structures/jump-list-item.md

@@ -17,7 +17,7 @@
 * `title` String (optional) - The text to be displayed for the item in the Jump List.
   Should only be set if `type` is `task`.
 * `description` String (optional) - Description of the task (displayed in a tooltip).
-  Should only be set if `type` is `task`.
+  Should only be set if `type` is `task`. Maximum length 260 characters.
 * `iconPath` String (optional) - The absolute path to an icon to be displayed in a
   Jump List, which can be an arbitrary resource file that contains an icon
   (e.g. `.ico`, `.exe`, `.dll`). You can usually specify `process.execPath` to

+ 7 - 0
shell/browser/ui/win/jump_list.cc

@@ -28,6 +28,13 @@ bool AppendTask(const JumpListItem& item, IObjectCollection* collection) {
       FAILED(link->SetDescription(item.description.c_str())))
     return false;
 
+  // SetDescription limits the size of the parameter to INFOTIPSIZE (1024),
+  // which suggests rejection when exceeding that limit, but experimentation
+  // has shown that descriptions longer than 260 characters cause a silent
+  // failure, despite SetDescription returning the success code S_OK.
+  if (item.description.size() > 260)
+    return false;
+
   if (!item.icon_path.empty() &&
       FAILED(link->SetIconLocation(item.icon_path.value().c_str(),
                                    item.icon_index)))