bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: escape chars + gettext hangs


From: Bruno Haible
Subject: Re: escape chars + gettext hangs
Date: Sun, 11 Jul 2004 19:39:48 +0200
User-agent: KMail/1.5

Arkadiusz Miƛkiewicz wrote:
> /usr/bin/gettext -e '\"' hangs for me (0.14.1).

Thanks for the report. The appended patch fixes it and will be contained
in the next release.

         Bruno


*** gettext-5/gettext-runtime/src/gettext.c     Sat Jul 10 20:23:28 2004
--- gettext-6/gettext-runtime/src/gettext.c     Sun Jul 11 02:31:01 2004
***************
*** 287,302 ****
    char *retval, *rp;
    const char *cp = str;
  
!   do
      {
        while (cp[0] != '\0' && cp[0] != '\\')
        ++cp;
      }
-   while (cp[0] != '\0' && cp[1] != '\0'
-        && strchr ("bcfnrt\\01234567", cp[1]) == NULL);
- 
-   if (cp[0] == '\0')
-     return str;
  
    retval = (char *) xmalloc (strlen (str));
  
--- 287,305 ----
    char *retval, *rp;
    const char *cp = str;
  
!   for (;;)
      {
        while (cp[0] != '\0' && cp[0] != '\\')
        ++cp;
+       if (cp[0] == '\0')
+       return str;
+       /* Found a backslash.  */
+       if (cp[1] == '\0')
+       return str;
+       if (strchr ("bcfnrt\\01234567", cp[1]) != NULL)
+       break;
+       ++cp;
      }
  
    retval = (char *) xmalloc (strlen (str));
  
***************
*** 305,310 ****
--- 308,314 ----
  
    do
      {
+       /* Here cp[0] == '\\'.  */
        switch (*++cp)
        {
        case 'a':               /* alert */
*** gettext-5/gettext-runtime/src/ngettext.c    Sat Jul 10 20:23:28 2004
--- gettext-6/gettext-runtime/src/ngettext.c    Sun Jul 11 02:31:01 2004
***************
*** 253,268 ****
    char *retval, *rp;
    const char *cp = str;
  
!   do
      {
        while (cp[0] != '\0' && cp[0] != '\\')
        ++cp;
      }
-   while (cp[0] != '\0' && cp[1] != '\0'
-        && strchr ("bfnrt\\01234567", cp[1]) == NULL);
- 
-   if (cp[0] == '\0')
-     return str;
  
    retval = (char *) xmalloc (strlen (str));
  
--- 253,271 ----
    char *retval, *rp;
    const char *cp = str;
  
!   for (;;)
      {
        while (cp[0] != '\0' && cp[0] != '\\')
        ++cp;
+       if (cp[0] == '\0')
+       return str;
+       /* Found a backslash.  */
+       if (cp[1] == '\0')
+       return str;
+       if (strchr ("bcfnrt\\01234567", cp[1]) != NULL)
+       break;
+       ++cp;
      }
  
    retval = (char *) xmalloc (strlen (str));
  
***************
*** 271,276 ****
--- 274,280 ----
  
    do
      {
+       /* Here cp[0] == '\\'.  */
        switch (*++cp)
        {
        case 'a':               /* alert */





reply via email to

[Prev in Thread] Current Thread [Next in Thread]