[BusyBox 0000650]: ash won't process non-ascii characters correctly, starting with v1.1.0

bugs at busybox.net bugs at busybox.net
Wed Jan 25 20:20:22 UTC 2006


The following issue has been REOPENED. 
====================================================================== 
http://busybox.net/bugs/view.php?id=650 
====================================================================== 
Reported By:                jemelja
Assigned To:                BusyBox
====================================================================== 
Project:                    BusyBox
Issue ID:                   650
Category:                   Other
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     feedback
====================================================================== 
Date Submitted:             01-19-2006 15:41 PST
Last Modified:              01-25-2006 12:20 PST
====================================================================== 
Summary:                    ash won't process non-ascii characters correctly,
starting with v1.1.0
Description: 
Hello,

`ash' behaves differently in busybox v1.1.0 and v1.01. It can't
process non-ascii characters (like iso-8859-1) anymore, for example

    # echo "Ä"  # `A' umlaut

gives

    -sh: Syntax error: Unterminated quoted string

instead of just `Ä'. The same example, but unquoted, makes the shell
crash.

After looking into it, I found that the reason for this new behaviour
is the new -funsigned-char switch to gcc (since 2005-12-01), and the
way character values are used as array indexes.

In shell/ash.c characters are read from a shell script using
`parsenextc', a pointer to `char'. Each character value will be added
to a SYNBASE of 130, then used as an index to a 258-byte
array. Non-ascii characters, with negative `char' values would result
in indexes less than 130.

Because `char' now is unsigned on default, non-ascii characters will
be greater than 127, resulting in indexes beyond the end of the array.

The attached patch is a simple fix, it defines the signedness of the
characters being parsed near the position where their values are
interpreted. But perhaps it would be better to define `parsenextc' and
`buf' (and corresponding struct parsefile entries) as `signed char',
rather than `char'.

Regards,
Michael

====================================================================== 

---------------------------------------------------------------------- 
 vodz - 01-20-06 01:25  
---------------------------------------------------------------------- 
This problem destroyed already in SVN 13421.
And your patch raptially only. 

---------------------------------------------------------------------- 
 jemelja - 01-25-06 12:20  
---------------------------------------------------------------------- 
Hi,

I don't see how this problem relates to SVN 13421 (this corrects a problem
introduced by a change that had been applied later that the 1.1.0
release).

It is still present in the snapshot of 2006-01-25, if compiled
with -funsigned-char. Maybe that's the reason for SVN 13504, that
has just reverted SVN 12615. If the flag is set again, ash likely would
show the described behaviour.

Thanks,
Michael 

Issue History 
Date Modified   Username       Field                    Change               
====================================================================== 
01-19-06 15:41  jemelja        New Issue                                    
01-19-06 15:41  jemelja        Status                   new => assigned     
01-19-06 15:41  jemelja        Assigned To               => BusyBox         
01-19-06 15:41  jemelja        File Added: shell_ash_signedchar.patch           
        
01-20-06 01:25  vodz           Note Added: 0000958                          
01-20-06 01:28  vodz           Status                   assigned => closed  
01-20-06 01:28  vodz           Resolution               open => fixed       
01-25-06 12:20  jemelja        Status                   closed => feedback  
01-25-06 12:20  jemelja        Resolution               fixed => reopened   
01-25-06 12:20  jemelja        Note Added: 0001003                          
======================================================================




More information about the busybox-cvs mailing list