|
16 | 16 | # Functions to read and write SR metadata |
17 | 17 | # |
18 | 18 |
|
19 | | -from sm_typing import ClassVar, override |
| 19 | +from sm_typing import ClassVar, Tuple, override |
20 | 20 |
|
21 | 21 | from abc import abstractmethod |
22 | 22 |
|
@@ -138,11 +138,11 @@ def file_read_wrapper(fd, offset, bytesToRead=METADATA_BLK_SIZE): |
138 | 138 | ([fd, offset, bytesToRead], e.errno)) |
139 | 139 |
|
140 | 140 |
|
141 | | -def to_utf8(s): |
| 141 | +def to_utf8(s: str) -> bytes: |
142 | 142 | return s.encode("utf-8") |
143 | 143 |
|
144 | 144 |
|
145 | | -def from_utf8(bs): |
| 145 | +def from_utf8(bs: bytes) -> str: |
146 | 146 | return bs.decode("utf-8") |
147 | 147 |
|
148 | 148 |
|
@@ -182,13 +182,14 @@ def buildHeader(length, major=metadata.MD_MAJOR, minor=metadata.MD_MINOR): |
182 | 182 | + str(minor)) |
183 | 183 |
|
184 | 184 |
|
185 | | -def unpackHeader(header): |
186 | | - vals = from_utf8(header).split(HEADER_SEP) |
| 185 | +def unpackHeader(header: bytes) -> Tuple[str, str, str, str]: |
| 186 | + decoded = from_utf8(header) |
| 187 | + if len(decoded.rstrip('\x00')) == 0: |
| 188 | + raise xs_errors.XenError('MetadataError', opterr='Empty header') |
| 189 | + vals = decoded.split(HEADER_SEP) |
187 | 190 | if len(vals) != 4 or vals[0] != metadata.HDR_STRING: |
188 | | - util.SMlog("Exception unpacking metadata header: " |
189 | | - "Error: Bad header '%s'" % (header)) |
190 | | - raise xs_errors.XenError('MetadataError', \ |
191 | | - opterr='Bad header') |
| 191 | + util.SMlog(f"Exception unpacking metadata header: Error: Bad header {header!r}") |
| 192 | + raise xs_errors.XenError('MetadataError', opterr='Bad header') |
192 | 193 | return (vals[0], vals[1], vals[2], vals[3]) |
193 | 194 |
|
194 | 195 |
|
|
0 commit comments