prevent CNAME/PTR parsing from reading data past the response end
[musl] / src / stdio / fputws.c
index 5723cbc..0ed02f1 100644 (file)
@@ -1,23 +1,28 @@
 #include "stdio_impl.h"
+#include "locale_impl.h"
 #include <wchar.h>
 
 int fputws(const wchar_t *restrict ws, FILE *restrict f)
 {
        unsigned char buf[BUFSIZ];
        size_t l=0;
+       locale_t *ploc = &CURRENT_LOCALE, loc = *ploc;
 
        FLOCK(f);
 
-       f->mode |= f->mode+1;
+       fwide(f, 1);
+       *ploc = f->locale;
 
        while (ws && (l = wcsrtombs((void *)buf, (void*)&ws, sizeof buf, 0))+1 > 1)
                if (__fwritex(buf, l, f) < l) {
                        FUNLOCK(f);
+                       *ploc = loc;
                        return -1;
                }
 
        FUNLOCK(f);
 
+       *ploc = loc;
        return l; /* 0 or -1 */
 }