Commit eed4be16 authored by myrth's avatar myrth Committed by Commit Bot

Check UsbDevice string fields for null.

Android API allows these methods to return null, but converters from
jni_string.h expect jstrings to be non-null with a DCHECK. See
https://developer.android.com/reference/android/hardware/usb/UsbDevice.html
> Returns ... or null if the property could not be read

R=reillyg@chromium.org
TEST=Don't crash in debug on null jstring DCHECK on KeyedService creation, or
any other scenarios that call UsbDeviceAndroid::Create. Was reproducible only
on certain devices, like Motorola Nexus 6.

Review-Url: https://codereview.chromium.org/2914453002
Cr-Commit-Position: refs/heads/master@{#475841}
parent 68adbbbf
...@@ -35,12 +35,18 @@ scoped_refptr<UsbDeviceAndroid> UsbDeviceAndroid::Create( ...@@ -35,12 +35,18 @@ scoped_refptr<UsbDeviceAndroid> UsbDeviceAndroid::Create(
device_version = Java_ChromeUsbDevice_getDeviceVersion(env, wrapper); device_version = Java_ChromeUsbDevice_getDeviceVersion(env, wrapper);
base::string16 manufacturer_string, product_string, serial_number; base::string16 manufacturer_string, product_string, serial_number;
if (base::android::BuildInfo::GetInstance()->sdk_int() >= 21) { if (base::android::BuildInfo::GetInstance()->sdk_int() >= 21) {
manufacturer_string = ConvertJavaStringToUTF16( ScopedJavaLocalRef<jstring> manufacturer_jstring =
env, Java_ChromeUsbDevice_getManufacturerName(env, wrapper)); Java_ChromeUsbDevice_getManufacturerName(env, wrapper);
product_string = ConvertJavaStringToUTF16( if (!manufacturer_jstring.is_null())
env, Java_ChromeUsbDevice_getProductName(env, wrapper)); manufacturer_string = ConvertJavaStringToUTF16(env, manufacturer_jstring);
serial_number = ConvertJavaStringToUTF16( ScopedJavaLocalRef<jstring> product_jstring =
env, Java_ChromeUsbDevice_getSerialNumber(env, wrapper)); Java_ChromeUsbDevice_getProductName(env, wrapper);
if (!product_jstring.is_null())
product_string = ConvertJavaStringToUTF16(env, product_jstring);
ScopedJavaLocalRef<jstring> serial_jstring =
Java_ChromeUsbDevice_getSerialNumber(env, wrapper);
if (!serial_jstring.is_null())
serial_number = ConvertJavaStringToUTF16(env, serial_jstring);
} }
return make_scoped_refptr(new UsbDeviceAndroid( return make_scoped_refptr(new UsbDeviceAndroid(
env, service, env, service,
......
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