bug-gnulib
[Top][All Lists]
Advanced

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

wcswidth: Fix result in case of overflow


From: Bruno Haible
Subject: wcswidth: Fix result in case of overflow
Date: Thu, 04 May 2023 23:25:32 +0200

This patch fixes a small bug in Gnulib's wcswidth replacement:
When the argument string is e.g.
  L"xxx...xxxz\n"
with a repetition of INT_MAX L'x' characters, the result has to be -1,
not INT_MAX.


2023-05-04  Bruno Haible  <bruno@clisp.org>

        wcswidth: Fix result in case of overflow.
        * lib/wcswidth-impl.h (wcswidth): Continue searching for a non-printing
        wide character after the total width has become > INT_MAX.

diff --git a/lib/wcswidth-impl.h b/lib/wcswidth-impl.h
index 644a093a7e..a879bfdd93 100644
--- a/lib/wcswidth-impl.h
+++ b/lib/wcswidth-impl.h
@@ -35,9 +35,22 @@ wcswidth (const wchar_t *s, size_t n)
     }
   return count;
 
+  /* The total width has become > INT_MAX.
+     Continue searching for a non-printing wide character.  */
+  for (; n > 0; s++, n--)
+    {
+      wchar_t c = *s;
+      if (c == (wchar_t)'\0')
+        break;
+      {
+        int width = wcwidth (c);
+        if (width < 0)
+          goto found_nonprinting;
+      }
+     overflow: ;
+    }
+  return INT_MAX;
+
  found_nonprinting:
   return -1;
-
- overflow:
-  return INT_MAX;
 }






reply via email to

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