On 2023-07-01 07:35, Bruno Haible wrote:
-      wchar_t wch;
-      size_t nbytes = mbrtowc (&wch, s, n, &d->mbs);
+      char32_t wch;
+      size_t nbytes = mbrtoc32 (&wch, s, n, &d->mbs);
       if (0 < nbytes && nbytes < (size_t) -2)
         {
           *pwc = wch;
+          if (nbytes == (size_t) -3)
+            nbytes = 0;
           return nbytes;

That last change doesn't match the comment for the mbs_to_wchar function, which says that the function always returns a positive int. Callers depend on this.

Since nbytes cannot be (size_t) -3 on any known implementation, it's not surprising that this issue wasn't found by testing. And since it'll likely be a hassle to port the rest of the code to purely-theoretical platforms where nbytes == (size_t) -3, I suggest instead simply adding a comment that nbytes cannot be (size_t) -3 there. This would follow the advice I added to the Gnulib manual recently, here:

https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=e046d5458353f112e78893ca03d855c8a9aa2e39

Reply via email to