Package: sysvinit
Version: 2.86.ds1-6
Severity: normal
Tags: patch

Hi,

[a-z] may not represent all 26 ASCII lowercase letters in regular
expressions, eg. Estonian collation sorts z between s and t:
  $ echo rstuvwxyz | LC_ALL=en_US.UTF-8 sed -e 's/[a-z]//g'

  $ echo rstuvwxyz | LC_ALL=et_EE.UTF-8 sed -e 's/[a-z]//g'
  tuvwxy
As shown above, this applies to sed, but also awk, grep, expr
  $ echo tuv | LC_ALL=et_EE.UTF-8 awk '/[a-z]/ {print}'
  $ echo tuv | LC_ALL=et_EE.UTF-8 grep [a-z]
  $ LC_ALL=et_EE.UTF-8 expr tuv : [a-z]
  $
and many more.
On the other hand, some commands always work with C collation rules,
most notably tr:
  $ echo 1rstuvwxyz2 | LC_ALL=et_EE.UTF-8 tr -d a-z
  12
or perl and python if they are not told to switch to user's locale.

One must then switch to C locale to avoid those collation issues,
see attached patch.  In this particular case, it is very unlikely
that someone gets hit by this bug, but well, it is easy to fix.

Thanks

Denis
diff -ru debian.orig/initscripts/preinst debian/initscripts/preinst
--- debian.orig/initscripts/preinst     2005-12-16 13:31:48.000000000 +0100
+++ debian/initscripts/preinst  2005-12-16 13:33:34.000000000 +0100
@@ -29,7 +29,7 @@
        echo "Saving variables from /etc/init.d/boot .."
        [ ! -d /etc/default ] && mkdir /etc/default
        rm -f /etc/default/rcS.sed
-       grep '^[A-Z]*=' /etc/init.d/boot | (
+       LC_ALL=C grep '^[A-Z]*=' /etc/init.d/boot | (
                while read line
                do
                        var=`echo $line | sed 's/=.*$//'`

Reply via email to