diff options
author | fvogel <fvogelnew1@free.fr> | 2017-06-02 20:48:47 (GMT) |
---|---|---|
committer | fvogel <fvogelnew1@free.fr> | 2017-06-02 20:48:47 (GMT) |
commit | eefcd374a1f034485840315fcc6a9c80a14489ff (patch) | |
tree | e097a9bb028efeeed973a629a64a7dfaa05f6bd8 /tests | |
parent | 9642f18455a827c21c138dd799c26badbd641c34 (diff) | |
download | tk-eefcd374a1f034485840315fcc6a9c80a14489ff.zip tk-eefcd374a1f034485840315fcc6a9c80a14489ff.tar.gz tk-eefcd374a1f034485840315fcc6a9c80a14489ff.tar.bz2 |
Fixed [b601ce3ab1]: A corrupted image can cause resource exhaustion. Patch for core-8-5-branch from Keith Nash
Diffstat (limited to 'tests')
-rw-r--r-- | tests/imgPhoto.test | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/tests/imgPhoto.test b/tests/imgPhoto.test index 14c3d40..f1b0e68 100644 --- a/tests/imgPhoto.test +++ b/tests/imgPhoto.test @@ -27,6 +27,25 @@ README -- Tk test suite design document. set teapotPhotoFile [file join [file dirname [info script]] teapot.ppm] testConstraint hasTeapotPhoto [file exists $teapotPhotoFile] +# - Tests 18.1-18.9 cause segfault on Tk 8.5 < 8.5.20. +proc test18ok {} { + expr { + ([package vsatisfies $::tk_patchLevel 8.6]) + || ( ($::tk_version eq "8.5") + && ([package vcompare $::tk_patchLevel 8.5.20] == 1) + ) + } +} + +proc base64ok {} { + expr { + ![catch {package require base64}] + } +} + +testConstraint SegfaultOn8.5 [test18ok] +testConstraint base64PackageNeeded [base64ok] + test imgPhoto-1.1 {options for photo images} { image create photo p1 -width 79 -height 83 list [lindex [p1 configure -width] 4] [lindex [p1 configure -height] 4] \ @@ -724,6 +743,143 @@ test imgPhoto-16.1 {copying to self doesn't access freed memory} { image delete $i } {} +# Reject corrupted or truncated image [Bug b601ce3ab1]. +# WARNING - tests marked "SegfaultOn8.5" will cause a segfault on +# 8.5.19 and lower. +test imgPhoto-18.1 {Reject corrupted GIF (binary string)} -constraints { + SegfaultOn8.5 base64PackageNeeded +} -setup { + package require base64 + set data [base64::decode { + R0lGODlhwjMz//8zM/8z/zP/MzP/////M////yH5CiwheLrcLTBCd6Tv2qW16tdK4jhV + 5qpraXIvM1JlNyAgOw== + }] +} -body { + image create photo gif1 -data $data +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {error reading color map} +test imgPhoto-18.2 {Reject corrupted GIF (base 64 string)} -constraints { + SegfaultOn8.5 +} -setup { + set data { + R0lGODlhwjMz//8zM/8z/zP/MzP/////M////yH5CiwheLrcLTBCd6Tv2qW16tdK4jhV + 5qpraXIvM1JlNyAgOw== + } +} -body { + image create photo gif1 -data $data +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {error reading color map} +test imgPhoto-18.3 {Reject corrupted GIF (file)} -constraints { + SegfaultOn8.5 +} -setup { + set fileName [file join [file dirname [info script]] corruptMangled.gif] +} -body { + image create photo gif1 -file $fileName +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {error reading color map} +test imgPhoto-18.4 {Reject truncated GIF (binary string)} -constraints { + SegfaultOn8.5 base64PackageNeeded +} -setup { + package require base64 + set data [base64::decode { + R0lGODlhEAAQAMIHAAAAADMz//8zM/8z/zP/MzP///8= + }] +} -body { + image create photo gif1 -data $data +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {error reading color map} +test imgPhoto-18.5 {Reject truncated GIF (base 64 string)} -constraints { + SegfaultOn8.5 +} -setup { + set data { + R0lGODlhEAAQAMIHAAAAADMz//8zM/8z/zP/MzP///8= + } +} -body { + image create photo gif1 -data $data +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {error reading color map} +test imgPhoto-18.6 {Reject truncated GIF (file)} -constraints { + SegfaultOn8.5 +} -setup { + set fileName [file join [file dirname [info script]] corruptTruncated.gif] +} -body { + image create photo gif1 -file $fileName +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {error reading color map} +test imgPhoto-18.7 {Reject corrupted GIF (> 4Gb) (binary string)} -constraints { + SegfaultOn8.5 base64PackageNeeded +} -setup { + package require base64 + set data [base64::decode { + R0lGODlhwmYz//8zM/8z/zP/MzP/////M////yH5Ciwhe + LrcLTBCd6Tv2qW16tdK4jhV5qpraXIvM1JlNyAgOw== + }] +} -body { + image create photo gif1 -data $data +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {not enough free memory for image buffer} +test imgPhoto-18.8 {Reject corrupted GIF (> 4Gb) (base 64 string)} -constraints { + SegfaultOn8.5 +} -setup { + set data { + R0lGODlhwmYz//8zM/8z/zP/MzP/////M////yH5Ciwhe + LrcLTBCd6Tv2qW16tdK4jhV5qpraXIvM1JlNyAgOw== + } +} -body { + image create photo gif1 -data $data +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {not enough free memory for image buffer} +test imgPhoto-18.9 {Reject corrupted GIF (> 4Gb) (file)} -constraints { + SegfaultOn8.5 +} -setup { + set fileName [file join [file dirname [info script]] corruptMangled4G.gif] +} -body { + image create photo gif1 -file $fileName +} -cleanup { + catch {image delete gif1} +} -returnCodes error -result {not enough free memory for image buffer} +test imgPhoto-18.10 {Valid GIF (binary string)} -constraints { + base64PackageNeeded +} -setup { + # Test the binary string reader with a valid GIF. + # This is not tested elsewhere. + # Tests 18.11, 18.12, with matching data, are included for completeness. + package require base64 + set data [base64::decode { + R0lGODlhEAAQAMIHAAAAADMz//8zM/8z/zP/MzP/////M////yH5BAEKAAcALAAA + AAAQABAAAAMheLrcLTBCd6QV79qlterXB0riOFXmmapraXIvM1IdZTcJADs= + }] +} -body { + image create photo gif1 -data $data +} -cleanup { + catch {image delete gif1} +} -result gif1 +test imgPhoto-18.11 {Valid GIF (base 64 string)} -setup { + set data { + R0lGODlhEAAQAMIHAAAAADMz//8zM/8z/zP/MzP/////M////yH5BAEKAAcALAAA + AAAQABAAAAMheLrcLTBCd6QV79qlterXB0riOFXmmapraXIvM1IdZTcJADs= + } +} -body { + image create photo gif1 -data $data +} -cleanup { + catch {image delete gif1} +} -result gif1 +test imgPhoto-18.12 {Valid GIF (file)} -setup { + set fileName [file join [file dirname [info script]] red.gif] +} -body { + image create photo gif1 -file $fileName +} -cleanup { + catch {image delete gif1} +} -result gif1 + destroy .c eval image delete [image names] |