From 7d991414055a0b03f339424ff76366c7d1c13a2a Mon Sep 17 00:00:00 2001 From: wiredfool Date: Thu, 14 Mar 2013 13:25:23 -0700 Subject: [PATCH] force seek to beginning of file --- Tests/test_file_tiff.py | 13 ------------ Tests/test_lena.py | 47 +++++++++++++++++++++++++++++++++++++++++ libImaging/TiffDecode.c | 1 + libImaging/TiffDecode.h | 9 ++++++-- 4 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 Tests/test_lena.py diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index af1500c66..a0278601b 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -114,17 +114,6 @@ def test_g4_tiff_bytesio(): assert_equal(im.size, (500,500)) _assert_noerr(im) -def xtest_g4_tiff_fail(): # UNDONE fails badly, unknown reason - """The 128x128 lena image fails for some reason. Investigating""" - - Image.DEBUG = True - file = "Tests/images/lena_g4.tif" - im = Image.open(file) - - assert_equal(im.size, (128,128)) - _assert_noerr(im) - Image.DEBUG = False - def test_g4_eq_png(): """ Checking that we're actually getting the data that we expect""" png = Image.open('Tests/images/lena_bw_500.png') @@ -134,7 +123,6 @@ def test_g4_eq_png(): def test_g4_write(): """Checking to see that the saved image is the same as what we wrote""" - Image.DEBUG = True file = "Tests/images/lena_g4_500.tif" orig = Image.open(file) @@ -151,4 +139,3 @@ def test_g4_write(): assert_false(orig.tobytes() == reread.tobytes()) - Image.DEBUG = False diff --git a/Tests/test_lena.py b/Tests/test_lena.py new file mode 100644 index 000000000..d0780fa87 --- /dev/null +++ b/Tests/test_lena.py @@ -0,0 +1,47 @@ +from tester import * + +from PIL import Image + +from test_file_tiff import _assert_noerr + +""" The small lena image was failing on open in the libtiff + decoder because the file pointer was set to the wrong place + by a spurious seek. It wasn't failing with the byteio method. + + It was fixed by forcing an lseek to the beginning of the + file just before reading in libtiff. These tests remain + to ensure that it stays fixed. """ + + +def test_g4_lena_file(): + """Testing the open file load path""" + + file = "Tests/images/lena_g4.tif" + with open(file,'rb') as f: + im = Image.open(f) + + assert_equal(im.size, (128,128)) + _assert_noerr(im) + +def test_g4_lena_bytesio(): + """Testing the bytesio loading code path""" + from io import BytesIO + file = "Tests/images/lena_g4.tif" + s = BytesIO() + with open(file,'rb') as f: + s.write(f.read()) + s.seek(0) + im = Image.open(s) + + assert_equal(im.size, (128,128)) + _assert_noerr(im) + +def test_g4_lena(): + """The 128x128 lena image fails for some reason. Investigating""" + + file = "Tests/images/lena_g4.tif" + im = Image.open(file) + + assert_equal(im.size, (128,128)) + _assert_noerr(im) + diff --git a/libImaging/TiffDecode.c b/libImaging/TiffDecode.c index 0927f29e9..51958904b 100644 --- a/libImaging/TiffDecode.c +++ b/libImaging/TiffDecode.c @@ -199,6 +199,7 @@ int ImagingLibTiffDecode(Imaging im, ImagingCodecState state, UINT8* buffer, int dump_state(clientstate); if (clientstate->fp) { TRACE(("Opening using fd: %d\n",clientstate->fp)); + lseek(clientstate->fp,0,SEEK_SET); // Sometimes, I get it set to the end. tiff = TIFFFdOpen(clientstate->fp, filename, mode); } else { TRACE(("Opening from string\n")); diff --git a/libImaging/TiffDecode.h b/libImaging/TiffDecode.h index d05c309f2..50570b5ef 100644 --- a/libImaging/TiffDecode.h +++ b/libImaging/TiffDecode.h @@ -13,6 +13,11 @@ #include #endif +#ifndef _UNISTD_H +#include +#endif + + #ifndef min #define min(x,y) (( x > y ) ? y : x ) #define max(x,y) (( x < y ) ? y : x ) @@ -50,8 +55,8 @@ extern int ImagingLibTiffSetField(ImagingCodecState state, ttag_t tag, ...); /* #define TRACE(args) */ -#endif +#endif /* _MSC_VER */ -#endif +#endif