exif: Allow more spacing characters in strings

The root cause of issue #8079 was a non-breaking space (U+0160).
`unicode.IsPrint` only allows the ASCII space (U+0020).  Be more lenient
by using `unicode.IsGraphic` instead.

Fixes #8079
This commit is contained in:
Cameron Moore 2021-03-13 09:21:30 -06:00 committed by Bjørn Erik Pedersen
parent 4d24e2a326
commit 0a2ab3f8fe
3 changed files with 15 additions and 1 deletions

View file

@ -227,7 +227,7 @@ func (e *exifWalker) Walk(f _exif.FieldName, tag *tiff.Tag) error {
func nullString(in []byte) string { func nullString(in []byte) string {
var rv bytes.Buffer var rv bytes.Buffer
for _, b := range in { for _, b := range in {
if unicode.IsPrint(rune(b)) { if unicode.IsGraphic(rune(b)) {
rv.WriteByte(b) rv.WriteByte(b)
} }
} }

View file

@ -75,6 +75,20 @@ func TestExifPNG(t *testing.T) {
c.Assert(err, qt.Not(qt.IsNil)) c.Assert(err, qt.Not(qt.IsNil))
} }
func TestIssue8079(t *testing.T) {
c := qt.New(t)
f, err := os.Open(filepath.FromSlash("../../testdata/iss8079.jpg"))
c.Assert(err, qt.IsNil)
defer f.Close()
d, err := NewDecoder()
c.Assert(err, qt.IsNil)
x, err := d.Decode(f)
c.Assert(err, qt.IsNil)
c.Assert(x.Tags["ImageDescription"], qt.Equals, "Città del Vaticano #nanoblock #vatican #vaticancity")
}
func BenchmarkDecodeExif(b *testing.B) { func BenchmarkDecodeExif(b *testing.B) {
c := qt.New(b) c := qt.New(b)
f, err := os.Open(filepath.FromSlash("../../testdata/sunset.jpg")) f, err := os.Open(filepath.FromSlash("../../testdata/sunset.jpg"))

BIN
resources/testdata/iss8079.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB