After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 717135 - A crash occurs if more than one tag beginning with hiragana is added to a photograph.
A crash occurs if more than one tag beginning with hiragana is added to a pho...
Status: RESOLVED FIXED
Product: shotwell
Classification: Other
Component: general
0.9
Other All
: Urgent normal
: ---
Assigned To: Jim Nelson
Shotwell Maintainers
Depends on:
Blocks:
 
 
Reported: 2011-02-03 09:41 UTC by clinton
Modified: 2013-05-01 06:39 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Charles Lindsay 2013-11-25 21:49:30 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.