GNOME Bugzilla – Bug 717135
A crash occurs if more than one tag beginning with hiragana is added to a photograph.
Last modified: 2013-05-01 06:39:00 UTC
---- Reported by clinton@yorba.org 2011-02-03 13:41:00 -0800 ---- Original Redmine bug id: 3152 Original URL: http://redmine.yorba.org/issues/3152 Searchable id: yorba-bug-3152 Original author: Clinton Rogers Original description: To reproduce: 1) Add a tag starting with a '?' or any other hiragana to any photograph. 2) With the same photograph from step one, add a tag starting with a '?' and observe the results. Shotwell exits with the following displayed on the console: ** ERROR:src/Tag.c:1323:tag_source_collection_real_notify_container_contents_adde d: assertion failed: (is_added) Aborted …and crashes with the same error immediately if relaunched. At this point, the user has to delete the file `~/.shotwell/photo.db` to restore correct operation. Stack trace from right before the offending operation: fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 _llseek(9, 24, [24], SEEK_SET) = 0 read(9, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####4####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 16) = 16 fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 access("/home/clinton/.shotwell/data/photo.db-wal", F_OK) = -1 ENOENT (No such file or directory) fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741825, len=1}, 0xbfc37708) = 0 stat64("/home/clinton/.shotwell/data/photo.db", {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 open("/home/clinton/.shotwell/data/photo.db-journal", O_RDWR|O_CREAT|O_LARGEFILE, 0644) = 28 open("/home/clinton/.shotwell/data", O_RDONLY|O_LARGEFILE) = 29 fcntl64(29, F_GETFD) = 0 fcntl64(29, F_SETFD, FD_CLOEXEC) = 0 fcntl64(28, F_GETFD) = 0 fcntl64(28, F_SETFD, FD_CLOEXEC) = 0 _llseek(28, 0, [0], SEEK_SET) = 0 write(28, "312571 41c27777777772645|####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 512) = 512 _llseek(28, 512, [512], SEEK_SET) = 0 write(28, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 4) = 4 _llseek(28, 516, [516], SEEK_SET) = 0 write(28, "r####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571####T057####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 1024) = 1024 _llseek(28, 1540, [1540], SEEK_SET) = 0 write(28, "264620", 4) = 4 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37608) = 0 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37608) = 0 _llseek(28, 1544, [1544], SEEK_SET) = 0 write(28, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 4) = 4 _llseek(28, 1548, [1548], SEEK_SET) = 0 write(28, "SQLite format 3####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####@ ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####4####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7"..., 1024) = 1024 _llseek(28, 2572, [2572], SEEK_SET) = 0 write(28, "2645|", 4) = 4 _llseek(9, 0, [0], SEEK_SET) = 0 write(9, "SQLite format 3####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####@ ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####5####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7"..., 1024) = 1024 _llseek(9, 5120, [5120], SEEK_SET) = 0 write(9, "r####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571####T057####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 1024) = 1024 close(29) = 0 close(28) = 0 unlink("/home/clinton/.shotwell/data/photo.db-journal") = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc375b8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=1073741824, len=2}, 0xbfc375b8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}, 0xbfc375b8) = 0 gettimeofday({1296768426, 436567}, NULL) = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37ba8) = 0 access("/home/clinton/.shotwell/data/photo.db-journal", F_OK) = -1 ENOENT (No such file or directory) fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 _llseek(9, 24, [24], SEEK_SET) = 0 read(9, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####5####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 16) = 16 fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 access("/home/clinton/.shotwell/data/photo.db-wal", F_OK) = -1 ENOENT (No such file or directory) fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741825, len=1}, 0xbfc37c58) = 0 stat64("/home/clinton/.shotwell/data/photo.db", {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 open("/home/clinton/.shotwell/data/photo.db-journal", O_RDWR|O_CREAT|O_LARGEFILE, 0644) = 28 open("/home/clinton/.shotwell/data", O_RDONLY|O_LARGEFILE) = 29 fcntl64(29, F_GETFD) = 0 fcntl64(29, F_SETFD, FD_CLOEXEC) = 0 fcntl64(28, F_GETFD) = 0 fcntl64(28, F_SETFD, FD_CLOEXEC) = 0 _llseek(28, 0, [0], SEEK_SET) = 0 write(28, "312571 41c27777777771452|####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 512) = 512 _llseek(28, 512, [512], SEEK_SET) = 0 write(28, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####6", 4) = 4 _llseek(28, 516, [516], SEEK_SET) = 0 write(28, "r35####CODEBLOCK233785571####470####CODEBLOCK233785571####03825q4####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 1024) = 1024 _llseek(28, 1540, [1540], SEEK_SET) = 0 write(28, "145263", 4) = 4 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37bf8) = 0 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37bf8) = 0 _llseek(28, 1544, [1544], SEEK_SET) = 0 write(28, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 4) = 4 _llseek(28, 1548, [1548], SEEK_SET) = 0 write(28, "SQLite format 3####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####@ ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####5####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7"..., 1024) = 1024 _llseek(28, 2572, [2572], SEEK_SET) = 0 write(28, "1452|", 4) = 4 _llseek(9, 0, [0], SEEK_SET) = 0 write(9, "SQLite format 3####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####@ ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####6####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7"..., 1024) = 1024 _llseek(9, 13312, [13312], SEEK_SET) = 0 write(9, "r####CODEBLOCK233785571####038####CODEBLOCK233785571####04700425q4####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 1024) = 1024 close(29) = 0 close(28) = 0 unlink("/home/clinton/.shotwell/data/photo.db-journal") = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=1073741824, len=2}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}, 0xbfc37ba8) = 0 gettimeofday({1296768426, 444023}, NULL) = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37ba8) = 0 access("/home/clinton/.shotwell/data/photo.db-journal", F_OK) = -1 ENOENT (No such file or directory) fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 _llseek(9, 24, [24], SEEK_SET) = 0 read(9, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####6####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 16) = 16 fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 access("/home/clinton/.shotwell/data/photo.db-wal", F_OK) = -1 ENOENT (No such file or directory) fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741825, len=1}, 0xbfc37c58) = 0 stat64("/home/clinton/.shotwell/data/photo.db", {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 open("/home/clinton/.shotwell/data/photo.db-journal", O_RDWR|O_CREAT|O_LARGEFILE, 0644) = 28 open("/home/clinton/.shotwell/data", O_RDONLY|O_LARGEFILE) = 29 fcntl64(29, F_GETFD) = 0 fcntl64(29, F_SETFD, FD_CLOEXEC) = 0 fcntl64(28, F_GETFD) = 0 fcntl64(28, F_SETFD, FD_CLOEXEC) = 0 _llseek(28, 0, [0], SEEK_SET) = 0 write(28, "312571 41c27777777776155360####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 512) = 512 _llseek(28, 512, [512], SEEK_SET) = 0 write(28, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####6", 4) = 4 _llseek(28, 516, [516], SEEK_SET) = 0 write(28, "r####CODEBLOCK233785571####038####CODEBLOCK233785571####04700425q4####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 1024) = 1024 _llseek(28, 1540, [1540], SEEK_SET) = 0 write(28, "6155363", 4) = 4 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37bf8) = 0 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37bf8) = 0 _llseek(28, 1544, [1544], SEEK_SET) = 0 write(28, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 4) = 4 _llseek(28, 1548, [1548], SEEK_SET) = 0 write(28, "SQLite format 3####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####@ ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####6####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7"..., 1024) = 1024 _llseek(28, 2572, [2572], SEEK_SET) = 0 write(28, "6155360", 4) = 4 _llseek(9, 0, [0], SEEK_SET) = 0 write(9, "SQLite format 3####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####@ ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7"..., 1024) = 1024 _llseek(9, 13312, [13312], SEEK_SET) = 0 write(9, "r25####CODEBLOCK233785571####047004####CODEBLOCK233785571####038q4####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 1024) = 1024 close(29) = 0 close(28) = 0 unlink("/home/clinton/.shotwell/data/photo.db-journal") = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=1073741824, len=2}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}, 0xbfc37ba8) = 0 gettimeofday({1296768426, 447076}, NULL) = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37ba8) = 0 access("/home/clinton/.shotwell/data/photo.db-journal", F_OK) = -1 ENOENT (No such file or directory) fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 _llseek(9, 24, [24], SEEK_SET) = 0 read(9, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 16) = 16 fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 access("/home/clinton/.shotwell/data/photo.db-wal", F_OK) = -1 ENOENT (No such file or directory) fstat64(9, {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741825, len=1}, 0xbfc37c58) = 0 stat64("/home/clinton/.shotwell/data/photo.db", {st_mode=S_IFREG|0644, st_size=15360, ...}) = 0 open("/home/clinton/.shotwell/data/photo.db-journal", O_RDWR|O_CREAT|O_LARGEFILE, 0644) = 28 open("/home/clinton/.shotwell/data", O_RDONLY|O_LARGEFILE) = 29 fcntl64(29, F_GETFD) = 0 fcntl64(29, F_SETFD, FD_CLOEXEC) = 0 fcntl64(28, F_GETFD) = 0 fcntl64(28, F_SETFD, FD_CLOEXEC) = 0 _llseek(28, 0, [0], SEEK_SET) = 0 write(28, "312571 41c277777777732w67t####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 512) = 512 _llseek(28, 512, [512], SEEK_SET) = 0 write(28, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####6", 4) = 4 _llseek(28, 516, [516], SEEK_SET) = 0 write(28, "r25####CODEBLOCK233785571####047004####CODEBLOCK233785571####038q4####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 1024) = 1024 _llseek(28, 1540, [1540], SEEK_SET) = 0 write(28, "32w6753", 4) = 4 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbfc37bf8) = 0 fcntl64(9, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37bf8) = 0 _llseek(28, 1544, [1544], SEEK_SET) = 0 write(28, "####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####", 4) = 4 _llseek(28, 1548, [1548], SEEK_SET) = 0 write(28, "SQLite format 3####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####@ ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7"..., 1024) = 1024 _llseek(28, 2572, [2572], SEEK_SET) = 0 write(28, "32w67t", 4) = 4 _llseek(9, 0, [0], SEEK_SET) = 0 write(9, "SQLite format 3####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####@ ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571#### ####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####7"..., 1024) = 1024 _llseek(9, 13312, [13312], SEEK_SET) = 0 write(9, "rq####CODEBLOCK233785571####047004####CODEBLOCK233785571####038~4####CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571########CODEBLOCK233785571####"..., 1024) = 1024 close(29) = 0 close(28) = 0 unlink("/home/clinton/.shotwell/data/photo.db-journal") = 0 fcntl64(9, F_SETLK64, {type=F_RDLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=1073741824, len=2}, 0xbfc37ba8) = 0 fcntl64(9, F_SETLK64, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}, 0xbfc37ba8) = 0 write(2, "**nERROR:src/Tag.c:1323:tag_sour"..., 113** ERROR:src/Tag.c:1323:tag_source_collection_real_notify_container_contents_added: assertion failed: (is_added) ) = 113 rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0 tgkill(13881, 13881, SIGABRT) = 0 --- SIGABRT (Aborted) @ 0 (0) --- +++ killed by SIGABRT +++ Aborted Related issues: related to shotwell - 6825: shotwell is aborted while loading (Fixed) ---- Additional Comments From shotwell-maint@gnome.bugs 2013-05-01 11:39:00 -0700 ---- ### History #### #1 Updated by Clinton Rogers almost 3 years ago Reproducible with katakana, hongul and Ethiopic as well. #### #2 Updated by Adam Dingle almost 3 years ago * **Target version** set to _0.9_ * **Priority** changed from _High_ to _Urgent_ Yep – I see this too. Upping to critical. #### #3 Updated by Adam Dingle almost 3 years ago I can also reproduce this in 0.8.1. #### #4 Updated by Adam Dingle almost 3 years ago * **Status** changed from _Open_ to _Review_ * **Assignee** changed from _Anonymous_ to _Jim Nelson_ This is quite possibly related to some of the UTF-8 changes Jim made for Shotwell 0.8. Assigning to Jim. #### #5 Updated by Jim Nelson almost 3 years ago The problem is that these two glyphs: ? and ? produce the same collation key, which means they are considered equal when compared. The assertion is triggering because this makes it look like they have the same name. Composing and decomposing the strings has no effect. #### #6 Updated by Jim Nelson almost 3 years ago An interesting data point: http://stackoverflow.com/questions/2468383 /glibustring-and-japanese-characters There's some suggestion here that setting the locale has an effect on this behavior. Also: http://unicode.org/faq/collation.html #### #7 Updated by Adam Dingle over 2 years ago I see this crash too. I investigated a bit and found that the two glyphs in questions do not actually produce the same collation key, at least not in this Vala program: void main() { string s = "?".collate_key(); string t = "?".collate_key(); stdout.puts(s == t ? "equaln" : "not equaln"); } So something else must be going on here. Jim, I'll hand this back to you to investigate further. #### #8 Updated by Adam Dingle over 2 years ago I investigated more. The program above reports that the strings are distinct because it's running in the default C locale, in which strcoll() is the same thing as strcmp(). Let's now add the following line at the beginning of the program, to tell it to use the locale specified by the LANG environment variable: Intl.setlocale(LocaleCategory.ALL, ""); Now it prints “equalâ€, at least with LANG=us_US.%(=caps)UTF%-8. #### #9 Updated by Adam Dingle over 2 years ago I just confirmed that with LANG=ja_JP.utf8 the program above prints “unequalâ€, showing thatthese strings collate to different values (as expected). #### #10 Updated by Jim Nelson over 2 years ago * **Status** changed from _Review_ to _5_ * **Resolution** set to _fixed_ * **% Done** changed from _0_ to _100_ r2715 Note that with this solution the database is not corrupted if a prior user had followed Clinton's steps. With this commit, the two names are represented as different tags. #### #11 Updated by Adam Dingle over 2 years ago Great! #### #12 Updated by Charles Lindsay 7 months ago * **Status** changed from _5_ to _Fixed_ --- Bug imported by chaz@yorba.org 2013-11-25 21:49 UTC --- This bug was previously known as _bug_ 3152 at http://redmine.yorba.org/show_bug.cgi?id=3152 Unknown Component Using default product and component set in Parameters Unknown milestone "unknown in product shotwell. Setting to default milestone for this product, "---". Setting qa contact to the default for this product. This bug either had no qa contact or an invalid one.