Tcl Source Code

View Ticket
Login
Ticket UUID: 461322
Title: regsub trashes encoding?
Type: Bug Version: obsolete: 8.4a3
Submitter: chris_nelson Created on: 2001-09-13 20:15:20
Subsystem: 43. Regexp Assigned To: hobbs
Priority: 7 High Severity:
Status: Closed Last Modified: 2001-09-14 06:46:45
Resolution: Fixed Closed By: hobbs
    Closed on: 2001-09-13 23:46:45
Description:
On at least Solaris 2.8, a fairly simple, stupid use of [regsub] produces corrupt output.  It may be 
that it uses some weird encoding.

It seems to be necessary that the expression and the substitute string are the same.  It seems 
very sensitive to order of operations that preceed it.  I'm fairly confident it has to do with object 
representation.

The following script:

  set pti(a) abcdefghijklmnopqurstuvwxyz
  set b      $pti(a)
  set pti(c) abcdefghijklmnopqurstuvwxyz0123456789

  puts "replace \n\t$pti(a)\nwith\n\t$b\nin\n\t$pti(c)"
  puts "string length:[string length $pti(c)]"
  puts "string byte length:[string bytelength $pti(c)]"

  regsub $pti(a) $pti(c) $b d

  puts "result:\n\t$d"
  puts "string length:[string length $d]"
  puts "string byte length:[string bytelength $d]"

Produces the following erroneous output:

  replace 
        abcdefghijklmnopqurstuvwxyz
  with
        abcdefghijklmnopqurstuvwxyz
  in
        abcdefghijklmnopqurstuvwxyz0123456789
  string length:37
  string byte length:37
  result:
        ab?efijklmnopqurstuvwxyz0123456789
  string length:37
  string byte length:41

At times during my quest to build a nice test case, I got 3-5 ?'s at the start of the string and 
bytelengths up to 45.

NOTE: If 

  set pti(a) abcdefghijklmnopqurstuvwxyz
  set b      $pti(a)

is replaced by:

  set pti(a) abcdefghijklmnopqurstuvwxyz
  set b       abcdefghijklmnopqurstuvwxyz

the problem does not seem to occur!
User Comments: hobbs added on 2001-09-14 06:46:45:

File Added - 10758: 461322.patch

Logged In: YES 
user_id=72656

This is an insidious problem related to shimmering where 
some commands that get passed the same object will need to 
duplicate the object to ensure correctness.  This may occur 
in other areas, but the patch for regsub is attached.  
Fixed in 8.4a4cvs.

andreas_kupries added on 2001-09-14 03:25:11:
Logged In: YES 
user_id=75003

I remember that Jeff fixed recently a bug in this area.
Assigning this to him. Priority up as eye-catcher.

msofer added on 2001-09-14 03:24:19:
Logged In: YES 
user_id=148712

Problem confirmed in linux with tcl8.4a3 and tcl8.4a4; does
not seem to happen on tcl8.3.3

Attachments: