diff options
author | Jörg Frings-Fürst <debian@jff.email> | 2018-07-09 12:10:38 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff.email> | 2018-07-09 12:10:38 +0200 |
commit | 709e2d6f5652ec90c194a4ec2b530bebc6f952cb (patch) | |
tree | 496b2f3899e1d5728ee9ae76095cc5056c317447 /src/photos/JfifSupport.vala | |
parent | f1353e9ffd34db5f755c7da0b3f9c10638fbfd38 (diff) | |
parent | 5c8be07095cc04a6d8a95204b0504fd7ab030154 (diff) |
Merge branch 'release/0.28.3-1'0.28.3-1
Diffstat (limited to 'src/photos/JfifSupport.vala')
-rw-r--r-- | src/photos/JfifSupport.vala | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/photos/JfifSupport.vala b/src/photos/JfifSupport.vala index 2861353..5ea64a5 100644 --- a/src/photos/JfifSupport.vala +++ b/src/photos/JfifSupport.vala @@ -201,16 +201,25 @@ namespace Jpeg { } public bool is_jpeg(File file) throws Error { - FileInputStream fins = file.read(null); - + var fins = file.read(null); + return is_jpeg_stream(fins); + } + + public bool is_jpeg_stream(InputStream ins) throws Error { Marker marker; - int segment_length = read_marker(fins, out marker); + int segment_length = read_marker(ins, out marker); // for now, merely checking for SOI return (marker == Marker.SOI) && (segment_length == 0); } - private int read_marker(FileInputStream fins, out Jpeg.Marker marker) throws Error { + public bool is_jpeg_bytes(Bytes bytes) throws Error { + var mins = new MemoryInputStream.from_bytes(bytes); + + return is_jpeg_stream(mins); + } + + private int read_marker(InputStream fins, out Jpeg.Marker marker) throws Error { marker = Jpeg.Marker.INVALID; DataInputStream dins = new DataInputStream(fins); @@ -226,8 +235,9 @@ namespace Jpeg { } uint16 length = dins.read_uint16(); - if (length < 2) { - debug("Invalid length %Xh at ofs %" + int64.FORMAT + "Xh", length, fins.tell() - 2); + if (length < 2 && fins is Seekable) { + debug("Invalid length %Xh at ofs %" + int64.FORMAT + "Xh", length, + (fins as Seekable).tell() - 2); return -1; } |