summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjenglish <jenglish@flightlab.com>2010-10-11 21:34:45 (GMT)
committerjenglish <jenglish@flightlab.com>2010-10-11 21:34:45 (GMT)
commitaff4deb1051f578be23a9c8449439e912d976c08 (patch)
treeab51d96c180845d6c165b2daec6782369de0feca
parent0a4da5d57f06d8c18a71b3cbffaddda4da894b41 (diff)
downloadtk-aff4deb1051f578be23a9c8449439e912d976c08.zip
tk-aff4deb1051f578be23a9c8449439e912d976c08.tar.gz
tk-aff4deb1051f578be23a9c8449439e912d976c08.tar.bz2
Fix crash in 'tag add' / 'tag remove' when no -tags specified [SF#3085489].
-rw-r--r--ChangeLog5
-rw-r--r--generic/ttk/ttkTreeview.c8
-rw-r--r--tests/ttk/treeview.test24
3 files changed, 31 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index fbbefe7..fbcc6d9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-10-11 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/ttk/ttkTreeview.c: Fix crash in 'tag add' / 'tag remove'
+ commands when no -tags specified [Bug 3085489].
+
2010-10-11 Jan Nijtmans <nijtmans@users.sf.net>
* win/tkWinMenu.c: [FRQ 2965056]: Windows build with -DUNICODE
diff --git a/generic/ttk/ttkTreeview.c b/generic/ttk/ttkTreeview.c
index 899ab17..d7afb3c 100644
--- a/generic/ttk/ttkTreeview.c
+++ b/generic/ttk/ttkTreeview.c
@@ -1,4 +1,4 @@
-/* $Id: ttkTreeview.c,v 1.40 2010/09/08 17:57:07 jenglish Exp $
+/* $Id: ttkTreeview.c,v 1.41 2010/10/11 21:34:45 jenglish Exp $
* Copyright (c) 2004, Joe English
*
* ttk::treeview widget implementation.
@@ -3140,7 +3140,7 @@ static int TreeviewTagNamesCommand(
static void AddTag(TreeItem *item, Ttk_Tag tag)
{
if (Ttk_TagSetAdd(item->tagset, tag)) {
- Tcl_DecrRefCount(item->tagsObj);
+ if (item->tagsObj) Tcl_DecrRefCount(item->tagsObj);
item->tagsObj = Ttk_NewTagSetObj(item->tagset);
Tcl_IncrRefCount(item->tagsObj);
}
@@ -3173,12 +3173,12 @@ static int TreeviewTagAddCommand(
return TCL_OK;
}
-/* + $tv tag remove $tag $items
+/* + $tv tag remove $tag ?$items?
*/
static void RemoveTag(TreeItem *item, Ttk_Tag tag)
{
if (Ttk_TagSetRemove(item->tagset, tag)) {
- Tcl_DecrRefCount(item->tagsObj);
+ if (item->tagsObj) Tcl_DecrRefCount(item->tagsObj);
item->tagsObj = Ttk_NewTagSetObj(item->tagset);
Tcl_IncrRefCount(item->tagsObj);
}
diff --git a/tests/ttk/treeview.test b/tests/ttk/treeview.test
index 2cb1704..79d4b17 100644
--- a/tests/ttk/treeview.test
+++ b/tests/ttk/treeview.test
@@ -1,5 +1,5 @@
#
-# $Id: treeview.test,v 1.7 2010/05/27 19:27:04 jenglish Exp $
+# $Id: treeview.test,v 1.8 2010/10/11 21:34:45 jenglish Exp $
#
# [7Jun2005] TO CHECK: [$tv see {}] -- shouldn't work (at least, shouldn't do
# what it currently does)
@@ -571,7 +571,7 @@ test treeview-identify-8 "identify element" -body {
} -match glob -result [list \
branch $disclosure branch2 $disclosure branch3 $disclosure]
-# See #2381555
+# See #2381555
test treeview-identify-9 "identify works when horizontally scrolled" -setup {
.tv configure -show {tree headings}
foreach column {#0 A B C} {
@@ -618,4 +618,24 @@ test treeview-3006842 "Null bindings" -setup {
destroy .tv
}
+test treeview-3085489-1 "tag add, no -tags" -setup {
+ ttk::treeview .tv
+} -body {
+ set item [.tv insert {} end]
+ .tv tag add foo $item
+ .tv item $item -tags
+} -cleanup {
+ destroy .tv
+} -result [list foo]
+
+test treeview-3085489-2 "tag remove, no -tags" -setup {
+ ttk::treeview .tv
+} -body {
+ set item [.tv insert {} end]
+ .tv tag remove foo $item
+ .tv item $item -tags
+} -cleanup {
+ destroy .tv
+} -result [list]
+
tcltest::cleanupTests