Return-Path: Delivered-To: apmail-incubator-stdcxx-dev-archive@www.apache.org Received: (qmail 88373 invoked from network); 26 Aug 2006 22:33:36 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 26 Aug 2006 22:33:36 -0000 Received: (qmail 80631 invoked by uid 500); 26 Aug 2006 22:33:36 -0000 Delivered-To: apmail-incubator-stdcxx-dev-archive@incubator.apache.org Received: (qmail 80573 invoked by uid 500); 26 Aug 2006 22:33:35 -0000 Mailing-List: contact stdcxx-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: stdcxx-dev@incubator.apache.org Delivered-To: mailing list stdcxx-dev@incubator.apache.org Received: (qmail 80562 invoked by uid 99); 26 Aug 2006 22:33:35 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 26 Aug 2006 15:33:35 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received: from [209.237.227.198] (HELO brutus.apache.org) (209.237.227.198) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 26 Aug 2006 15:33:35 -0700 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id B65BC41000C for ; Sat, 26 Aug 2006 22:30:22 +0000 (GMT) Message-ID: <13290659.1156631422729.JavaMail.jira@brutus> Date: Sat, 26 Aug 2006 15:30:22 -0700 (PDT) From: "Martin Sebor (JIRA)" To: stdcxx-dev@incubator.apache.org Subject: [jira] Commented: (STDCXX-280) SIGABRT in codecvt::out() In-Reply-To: <14063955.1156629202274.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N [ http://issues.apache.org/jira/browse/STDCXX-280?page=comments#action_12430797 ] Martin Sebor commented on STDCXX-280: ------------------------------------- Using wcsrtombs() to convert more than one wide character at a time is not safe when the source sequence is not guaranteed to be NUL-terminated. A safer approach would be to use wcrtomb() instead and convert just one character at a time. A (possibly more efficient) alternative might be to use wcsrtombs() if the source (sub)sequence contains an embedded NUL and fall back on wcrtomb() when it doesn't. > SIGABRT in codecvt::out() > ------------------------- > > Key: STDCXX-280 > URL: http://issues.apache.org/jira/browse/STDCXX-280 > Project: C++ Standard Library > Issue Type: Bug > Components: 22. Localization > Affects Versions: 4.1.2, 4.1.3 > Environment: all > Reporter: Martin Sebor > Priority: Critical > > The program below aborts on Solaris 9: > $ cat u.cpp && make u && LC_ALL=zh_CN.UTF-8@pinyin ./u > #include > #include > #include > int main () > { > typedef std::codecvt CodeCvt; > const std::locale loc (""); > const CodeCvt &cvt = std::use_facet(loc); > CodeCvt::state_type state = { }; > const wchar_t* const from = L"\n\377"; > const wchar_t* const from_end = from + 1; > const wchar_t* from_next = 0; > char to [40]; > char* const to_limit = to + sizeof to; > char* to_next = 0; > CodeCvt::result res; > res = cvt.out (state, from, from_end, from_next, to, to_limit, to_next); > assert (cvt.ok == res); > assert (from_next == from_end); > assert (to_next == to + 1); > assert ('\n' == *to); > } > gcc -c -I/build/sebor/dev/stdlib/include/ansi -D_RWSTDDEBUG -D_RWSTD_USE_CONFIG -I/build/sebor/dev/stdlib/include -I/build/sebor/gcc-4.1.0-11s/include -I/build/sebor/dev/stdlib/../rwtest -I/build/sebor/dev/stdlib/../rwtest/include -I/build/sebor/dev/stdlib/tests/include -pedantic -nostdinc++ -g -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long u.cpp > u.cpp: In function 'int main()': > u.cpp:11: warning: missing initializer for member '__mbstate_t::__filler' > gcc u.o -o u -L/build/sebor/gcc-4.1.0-11s/rwtest -lrwtest11s -L/build/sebor/gcc-4.1.0-11s/lib -lstd11s -lsupc++ -lm > /build/sebor/dev/stdlib/src/wcodecvt.cpp:496: std::codecvt_base::result __rw::__rw_libc_do_out(__mbstate_t&, const wchar_t*, const wchar_t*, const wchar_t*&, char*, char*, char*&): Assertion 'from_next <= from_end' failed. > Segmentation Fault (core dumped) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira