(context: &mut ReadContext)
| 64 | #[cold] |
| 65 | #[inline(never)] |
| 66 | fn skip_string(context: &mut ReadContext) -> Result<(), Error> { |
| 67 | let header = context.reader.read_var_u36_small()?; |
| 68 | let len = (header >> 2) as usize; |
| 69 | let encoding = header & 0b11; |
| 70 | match encoding { |
| 71 | // Latin1 and UTF-16 have no validation beyond readable bytes in the current reader. |
| 72 | 0 | 1 => skip_bytes(context, len), |
| 73 | 2 => { |
| 74 | if context.is_check_string_read() { |
| 75 | let start = context.reader.get_cursor(); |
| 76 | context.reader.check_bound(len)?; |
| 77 | let bytes = context.reader.sub_slice(start, start + len)?; |
| 78 | std::str::from_utf8(bytes) |
| 79 | .map_err(|_| Error::encoding_error("invalid UTF-8 string"))?; |
| 80 | } |
| 81 | skip_bytes(context, len) |
| 82 | } |
| 83 | _ => Err(Error::encoding_error(format!( |
| 84 | "wrong encoding value: {}", |
| 85 | encoding |
| 86 | ))), |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | #[cold] |
| 91 | #[inline(never)] |
no test coverage detected