| Index: src/wasm/wasm-module.h
 | 
| diff --git a/src/wasm/wasm-module.h b/src/wasm/wasm-module.h
 | 
| index b13345e458726d8f67d2234638e2e50aebd6f0d2..4a6eb92b5d040237f856e66872a6674081bf981d 100644
 | 
| --- a/src/wasm/wasm-module.h
 | 
| +++ b/src/wasm/wasm-module.h
 | 
| @@ -57,7 +57,6 @@ enum WasmFunctionDeclBit {
 | 
|  
 | 
|  // Constants for fixed-size elements within a module.
 | 
|  static const size_t kDeclMemorySize = 3;
 | 
| -static const size_t kDeclGlobalSize = 6;
 | 
|  static const size_t kDeclDataSegmentSize = 13;
 | 
|  
 | 
|  // Static representation of a WASM function.
 | 
| @@ -66,6 +65,7 @@ struct WasmFunction {
 | 
|    uint32_t func_index;   // index into the function table.
 | 
|    uint32_t sig_index;    // index into the signature table.
 | 
|    uint32_t name_offset;  // offset in the module bytes of the name, if any.
 | 
| +  uint32_t name_length;  // length in bytes of the name.
 | 
|    uint32_t code_start_offset;    // offset in the module bytes of code start.
 | 
|    uint32_t code_end_offset;      // offset in the module bytes of code end.
 | 
|    uint16_t local_i32_count;      // number of i32 local variables.
 | 
| @@ -81,18 +81,22 @@ struct WasmImport {
 | 
|    FunctionSig* sig;               // signature of the function.
 | 
|    uint32_t sig_index;             // index into the signature table.
 | 
|    uint32_t module_name_offset;    // offset in module bytes of the module name.
 | 
| +  uint32_t module_name_length;    // length in bytes of the module name.
 | 
|    uint32_t function_name_offset;  // offset in module bytes of the import name.
 | 
| +  uint32_t function_name_length;  // length in bytes of the import name.
 | 
|  };
 | 
|  
 | 
|  // Static representation of an exported WASM function.
 | 
|  struct WasmExport {
 | 
|    uint32_t func_index;   // index into the function table.
 | 
|    uint32_t name_offset;  // offset in module bytes of the name to export.
 | 
| +  uint32_t name_length;  // length in bytes of the exported name.
 | 
|  };
 | 
|  
 | 
|  // Static representation of a wasm global variable.
 | 
|  struct WasmGlobal {
 | 
|    uint32_t name_offset;  // offset in the module bytes of the name, if any.
 | 
| +  uint32_t name_length;  // length in bytes of the global name.
 | 
|    MachineType type;      // type of the global.
 | 
|    uint32_t offset;       // offset from beginning of globals area.
 | 
|    bool exported;         // true if this global is exported.
 | 
| @@ -134,18 +138,18 @@ struct WasmModule {
 | 
|  
 | 
|    WasmModule();
 | 
|  
 | 
| -  // Get a pointer to a string stored in the module bytes representing a name.
 | 
| -  const char* GetName(uint32_t offset) const {
 | 
| -    if (offset == 0) return "<?>";  // no name.
 | 
| -    CHECK(BoundsCheck(offset, offset + 1));
 | 
| -    return reinterpret_cast<const char*>(module_start + offset);
 | 
| +  // Get a string stored in the module bytes representing a name.
 | 
| +  WasmName GetName(uint32_t offset, uint32_t length) const {
 | 
| +    if (length == 0) return {"<?>", 3};  // no name.
 | 
| +    CHECK(BoundsCheck(offset, offset + length));
 | 
| +    return {reinterpret_cast<const char*>(module_start + offset), length};
 | 
|    }
 | 
|  
 | 
| -  // Get a pointer to a string stored in the module bytes representing a name.
 | 
| -  const char* GetNameOrNull(uint32_t offset) const {
 | 
| -    if (offset == 0) return nullptr;  // no name.
 | 
| -    CHECK(BoundsCheck(offset, offset + 1));
 | 
| -    return reinterpret_cast<const char*>(module_start + offset);
 | 
| +  // Get a string stored in the module bytes representing a name.
 | 
| +  WasmName GetNameOrNull(uint32_t offset, uint32_t length) const {
 | 
| +    if (length == 0) return {NULL, 0};  // no name.
 | 
| +    CHECK(BoundsCheck(offset, offset + length));
 | 
| +    return {reinterpret_cast<const char*>(module_start + offset), length};
 | 
|    }
 | 
|  
 | 
|    // Checks the given offset range is contained within the module bytes.
 | 
| 
 |