Commit d4b9be78 authored by Hitoshi Yoshida's avatar Hitoshi Yoshida Committed by Commit Bot

binding: Check dictionary members available before its use

The code generator will be updated soon (issue 839389), and the new
generator does not allow to access missing members.
This CL adds to check some mebers' exisntence before accessing them
to avoid probable crash issues in ImageResouce.

Bug: 839389
Change-Id: I06a5519c793269ecbb6d1f0718ff478cfcf0fb02
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2358932
Commit-Queue: Hitoshi Yoshida <peria@chromium.org>
Reviewed-by: default avatarYuki Shiino <yukishiino@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799024}
parent c60c0b7a
......@@ -127,29 +127,31 @@ Manifest::ImageResource ConvertManifestImageResource(
manifest_icon.type = WebString(mojo::ParseType(icon->type())).Utf16();
// Parse 'purpose'
const auto purposes = mojo::ParsePurpose(icon->purpose());
// ParsePurpose() would've weeded out any purposes that're not ANY or
// MONOCHROME.
for (auto purpose : purposes) {
switch (purpose) {
case mojo::Purpose::ANY:
manifest_icon.purpose.emplace_back(
Manifest::ImageResource::Purpose::ANY);
break;
case mojo::Purpose::MONOCHROME:
manifest_icon.purpose.emplace_back(
Manifest::ImageResource::Purpose::MONOCHROME);
break;
case mojo::Purpose::MASKABLE:
manifest_icon.purpose.emplace_back(
Manifest::ImageResource::Purpose::MASKABLE);
break;
if (icon->hasPurpose()) {
// ParsePurpose() would've weeded out any purposes that're not ANY or
// MONOCHROME.
for (auto purpose : mojo::ParsePurpose(icon->purpose())) {
switch (purpose) {
case mojo::Purpose::ANY:
manifest_icon.purpose.emplace_back(
Manifest::ImageResource::Purpose::ANY);
break;
case mojo::Purpose::MONOCHROME:
manifest_icon.purpose.emplace_back(
Manifest::ImageResource::Purpose::MONOCHROME);
break;
case mojo::Purpose::MASKABLE:
manifest_icon.purpose.emplace_back(
Manifest::ImageResource::Purpose::MASKABLE);
break;
}
}
}
// Parse 'sizes'.
WTF::Vector<gfx::Size> sizes = mojo::ParseSizes(icon->sizes());
for (const auto& size : sizes) {
manifest_icon.sizes.emplace_back(size);
if (icon->hasSizes()) {
for (const auto& size : mojo::ParseSizes(icon->sizes())) {
manifest_icon.sizes.emplace_back(size);
}
}
return manifest_icon;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment