Merge pull request #77 from Farkal/read_ascii_in_offset
Read ascii encoded in offset
This commit is contained in:
2 files changed
+17
-7
No files matched your search
+11
-3
@@ -198,9 +198,17 @@ impl Entry {
|
|||||||
if n > limits.decoding_buffer_size {
|
if n > limits.decoding_buffer_size {
|
||||||
return Err(TiffError::LimitsExceeded);
|
return Err(TiffError::LimitsExceeded);
|
||||||
}
|
}
|
||||||
decoder.goto_offset(self.r(bo).read_u32()?)?;
|
if n <= 4 {
|
||||||
let string = decoder.read_string(n)?;
|
let mut buf = vec![0; n];
|
||||||
Ok(Ascii(string))
|
self.r(bo).read_exact(&mut buf )?;
|
||||||
|
let v = String::from_utf8(buf)?;
|
||||||
|
let v = v.trim_matches(char::from(0));
|
||||||
|
Ok(Ascii(v.into()))
|
||||||
|
} else {
|
||||||
|
decoder.goto_offset(self.r(bo).read_u32()?)?;
|
||||||
|
let string = decoder.read_string(n)?;
|
||||||
|
Ok(Ascii(string))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_ => Err(TiffError::UnsupportedError(
|
_ => Err(TiffError::UnsupportedError(
|
||||||
TiffUnsupportedError::UnsupportedDataType,
|
TiffUnsupportedError::UnsupportedDataType,
|
||||||
|
|||||||
+6
-4
@@ -424,11 +424,13 @@ impl<R: Read + Seek> Decoder<R> {
|
|||||||
/// Reads a string
|
/// Reads a string
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn read_string(&mut self, length: usize) -> TiffResult<String> {
|
pub fn read_string(&mut self, length: usize) -> TiffResult<String> {
|
||||||
let mut out = String::with_capacity(length);
|
let mut out = vec![0; length];
|
||||||
self.reader.read_to_string(&mut out)?;
|
self.reader.read_exact(&mut out)?;
|
||||||
// Strings may be null-terminated, so we trim anything downstream of the null byte
|
// Strings may be null-terminated, so we trim anything downstream of the null byte
|
||||||
let trimmed = out.bytes().take_while(|&n| n != 0).collect::<Vec<u8>>();
|
if let Some(first) = out.iter().position(|&b| b == 0) {
|
||||||
Ok(String::from_utf8(trimmed)?)
|
out.truncate(first);
|
||||||
|
}
|
||||||
|
Ok(String::from_utf8(out)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Reads a TIFF IFA offset/value field
|
/// Reads a TIFF IFA offset/value field
|
||||||
|
|||||||
Reference in new issue
Block a user