Bug 180362 - Pasting into XmTextField is unreliable
Summary: Pasting into XmTextField is unreliable
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 3
Classification: Red Hat
Component: openmotif
Version: 3.0
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Thomas Woerner
QA Contact:
URL:
Whiteboard:
Depends On: 179549
Blocks: RHEL3U8CanFix
TreeView+ depends on / blocked
 
Reported: 2006-02-07 15:43 UTC by Thomas Woerner
Modified: 2007-11-30 22:07 UTC (History)
0 users

Fixed In Version: RHBA-2006-0293
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2006-07-20 14:36:48 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2006:0293 0 normal SHIPPED_LIVE openmotif bug fix update 2006-07-19 18:42:00 UTC

Description Thomas Woerner 2006-02-07 15:43:16 UTC
+++ This bug was initially created as a clone of Bug #179549 +++

Description of problem:

We're using a UTF-8 locale and have a modify verify callback on our XmTextField
widgets.  In this environment selecting text and pasting it into an XmTextField
is unreliable:  sometimes nothing happens and sometimes garbage is appended to
the pasted text.  Everything works properly in the C locale or if there's no
modify verify callback.

Running the application under valgrind shows a couple of memory problems related
to the issue:

In TextFSel.c, around line 1100, the array wc_value is one character too short.

In TextF.c, around line 2934, the size of the array insert_orig is specified
using tf->text.max_char_size, whereas the documentation indicates that insert is
an array of wchar_t.  In our UTF-8 locale tf->text.max_char_size is 6 while
sizeof(wchar_t) is 4, so the bcopy at line 2935 is fetching data from beyond the
end of the array insert.

I've produced a patch which I think fixes these issues.  With this patch we can
paste text into our application reliably and valgrind is happy.


Version-Release number of selected component (if applicable):

2.2.3-9.RHEL4.1, though other versions are affected


How reproducible:


Steps to Reproduce:
1.
2.
3.
  
Actual results:


Expected results:


Additional info:

I've raised this issue upstream at:

   http://bugs.motifzone.net/show_bug.cgi?id=1321

-- Additional comment from rmy on 2006-02-01 06:23 EST --
Created an attachment (id=123954)
Proposed patch


-- Additional comment from twoerner on 2006-02-01 12:03 EST --
Created an attachment (id=123975)
Revised patch after code review.

This patch honors the text.max_char_size for generation of insert_orig in the
same way as ModifyVerify does.

-- Additional comment from rmy on 2006-02-01 16:38 EST --
Thanks for the revised patch, Thomas.  I've tried it with my test program and it
seems to work nicely.  Valgrind is now happy in both UTF-8 and C locales.

-- Additional comment from rmy on 2006-02-06 09:55 EST --
On further investigation I find that previous patches don't work if the
clipboard selection is used rather than the primary selection  (for example,
because XmTextFieldPaste has been called).  In this case ds->value (TextFSel.c
line 1102) isn't null terminated.  I've made a new patch to cover this case.

-- Additional comment from rmy on 2006-02-06 09:57 EST --
Created an attachment (id=124259)
Revised patch to handle clipboard


-- Additional comment from twoerner on 2006-02-06 11:07 EST --
Please attach your test case.

-- Additional comment from rmy on 2006-02-06 11:42 EST --
Created an attachment (id=124266)
testcase

Here's a hacked version of one of the examples from the O'Reilly Motif book
that should illustrate the problem.  I've changed the XmText widget in the
original to XmTextField.

Comment 5 Red Hat Bugzilla 2006-07-20 14:36:48 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHBA-2006-0293.html



Note You need to log in before you can comment on or make changes to this bug.