Browse Source

Prevent crashes when metadata keys and values can't be converted to strings.

Google API servers can return binary metadata on errors.
Tim Burks 8 years ago
parent
commit
b8dc92aea4
1 changed files with 12 additions and 4 deletions
  1. 12 4
      Sources/gRPC/Metadata.swift

+ 12 - 4
Sources/gRPC/Metadata.swift

@@ -71,13 +71,21 @@ public class Metadata : CustomStringConvertible, NSCopying {
   }
 
   public func key(_ index: Int) -> (String) {
-    return String(cString:cgrpc_metadata_array_get_key_at_index(underlyingArray, index),
-                  encoding:String.Encoding.utf8)!;
+    if let key = String(cString:cgrpc_metadata_array_get_key_at_index(underlyingArray, index),
+                        encoding:String.Encoding.utf8) {
+      return key
+    } else {
+      return "<binary-metadata-key>"
+    }
   }
 
   public func value(_ index: Int) -> (String) {
-    return String(cString:cgrpc_metadata_array_get_value_at_index(underlyingArray, index),
-                  encoding:String.Encoding.utf8)!;
+    if let value = String(cString:cgrpc_metadata_array_get_value_at_index(underlyingArray, index),
+                          encoding:String.Encoding.utf8) {
+      return value
+    } else {
+      return "<binary-metadata-value>"
+    }
   }
 
   public func add(key:String, value:String) {