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
This commit is contained in:
SushiJackal 2021-04-06 01:50:39 +02:00 committed by GitHub
parent c280d770dc
commit 82ea8ea68c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 1 deletions

View file

@ -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 entire custom category being omitted from the Jump List. The list of removed
items can be obtained using `app.getJumpListSettings()`. 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: Here's a very simple example of creating a custom Jump List:
```javascript ```javascript

View file

@ -19,3 +19,7 @@
property set then its `type` is assumed to be `tasks`. If the `name` property 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 is set but the `type` property is omitted then the `type` is assumed to be
`custom`. `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.

View file

@ -17,7 +17,7 @@
* `title` String (optional) - The text to be displayed for the item in the Jump List. * `title` String (optional) - The text to be displayed for the item in the Jump List.
Should only be set if `type` is `task`. Should only be set if `type` is `task`.
* `description` String (optional) - Description of the task (displayed in a tooltip). * `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 * `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 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 (e.g. `.ico`, `.exe`, `.dll`). You can usually specify `process.execPath` to

View file

@ -28,6 +28,13 @@ bool AppendTask(const JumpListItem& item, IObjectCollection* collection) {
FAILED(link->SetDescription(item.description.c_str()))) FAILED(link->SetDescription(item.description.c_str())))
return false; 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() && if (!item.icon_path.empty() &&
FAILED(link->SetIconLocation(item.icon_path.value().c_str(), FAILED(link->SetIconLocation(item.icon_path.value().c_str(),
item.icon_index))) item.icon_index)))