Bug 180362

Summary: Pasting into XmTextField is unreliable
Product: Red Hat Enterprise Linux 3 Reporter: Thomas Woerner <twoerner>
Component: openmotifAssignee: Thomas Woerner <twoerner>
Status: CLOSED ERRATA QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: 3.0   
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: RHBA-2006-0293 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2006-07-20 14:36:48 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 179549    
Bug Blocks: 181405    

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