diff options
| author | 2017-07-11 11:18:59 -0600 | |
|---|---|---|
| committer | 2017-07-13 15:53:42 +0000 | |
| commit | 20568917af6d2a6c569d7f0f0155e80c3bcd1b78 (patch) | |
| tree | 4cfea8b02f7d0b0a69210f2157d98b37fd829ee7 /services/usb/java | |
| parent | b82963f3e038cf12708374c78aff3f57619d02b7 (diff) | |
More fine-grained exception handling so we can still use non-excepting descriptors.
Bug: 63655391
Test: Manual - connect various devices and verify the connection state is correct.
Change-Id: Iae6143d2e853e916c8588e0c6f771c00714b3a8a
Diffstat (limited to 'services/usb/java')
| -rw-r--r-- | services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java index 7c074dadadf9..303a577767ad 100644 --- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java +++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java @@ -118,27 +118,28 @@ public class UsbDescriptorParser { /** * @hide */ - public boolean parseDescriptors(byte[] descriptors) { - try { - mDescriptors.clear(); - - ByteStream stream = new ByteStream(descriptors); - while (stream.available() > 0) { - UsbDescriptor descriptor = allocDescriptor(stream); - if (descriptor != null) { - // Parse + public void parseDescriptors(byte[] descriptors) { + mDescriptors.clear(); + + ByteStream stream = new ByteStream(descriptors); + while (stream.available() > 0) { + UsbDescriptor descriptor = allocDescriptor(stream); + if (descriptor != null) { + // Parse + try { descriptor.parseRawDescriptors(stream); - mDescriptors.add(descriptor); - - // Clean up - descriptor.postParse(stream); + } catch (Exception ex) { + Log.e(TAG, "Exception parsing USB descriptors.", ex); } + + // Its OK to add the invalid descriptor as the postParse() + // routine will mark it as invalid. + mDescriptors.add(descriptor); + + // Clean up + descriptor.postParse(stream); } - return true; - } catch (Exception ex) { - Log.e(TAG, "Exception parsing USB descriptors.", ex); } - return false; } /** @@ -146,7 +147,11 @@ public class UsbDescriptorParser { */ public boolean parseDevice(String deviceAddr) { byte[] rawDescriptors = getRawDescriptors(deviceAddr); - return rawDescriptors != null && parseDescriptors(rawDescriptors); + if (rawDescriptors != null) { + parseDescriptors(rawDescriptors); + return true; + } + return false; } private native byte[] getRawDescriptors(String deviceAddr); |