[cfe-dev] [PATCH] [libc++] Ensure std::getline always 0-terminates string.

Jonathan Roelofs via cfe-dev cfe-dev at lists.llvm.org
Fri Sep 8 08:36:43 PDT 2017



On 9/8/17 12:59 AM, Reimar Döffinger via cfe-dev wrote:
> Could someone please take care of and clean up your contribution documentation
As open source developers, our "currency" is patches and patch review, 
so "here's a patch to fix some documentation I found confusing" is much 
more productive than "can someone please fix it"... Patches welcome ;)

> This is the only project I have heard of where patches are discussed on the commits list (some seriously bad naming), that really should be in BOLD but instead https://libcxx.llvm.org/ only links to the subscription page for cfe-dev,

Near the bottom of that page:

"If you want to contribute a patch to libc++, the best place for that is 
Phabricator. Please include [libc++] in the subject and add cfe-commits 
as a subscriber."

  https://llvm.org/docs/DeveloperPolicy.html is rather wishy-washy about it,

I suppose that could stand to be slightly more explicit.

  and the bugzilla doesn't even accept account creation without going 
via email.

That was because we were having a spam problem. Lots of fake accounts, 
and spammy bug reports.

> I've seen one-person projects handling it better and not having the gall on top of it to write in the documentation as number 2 goal "Make life as simple and easy for contributors as possible."
> I mean seriously, gcc with its copyright assignment hassle is not the reference to shoot for... >
> On 08.09.2017, at 08:38, Shoaib Meenai <smeenai at fb.com> wrote:
> 
>> Patches should go to cfe-commits, not cfe-dev. You can also use Phabricator.
>>
>> On 9/7/17, 11:17 PM, "cfe-dev on behalf of Reimar Döffinger via cfe-dev" <cfe-dev-bounces at lists.llvm.org on behalf of cfe-dev at lists.llvm.org> wrote:
>>
>>     If the sentinel failed (e.g. due to having reached
>>     EOF before) or an exception was caught it failed to
>>     do that.
>>     While it seems (unfortunately!) not required by the
>>     specification, libstdc++ does 0-terminate and not
>>     doing so risks creating security issues in applications.
>>     ---
>>      include/istream | 6 ++++--
>>      1 file changed, 4 insertions(+), 2 deletions(-)
>>
>>     diff --git a/include/istream b/include/istream
>>     index 0b8e05d95..5c73df38f 100644
>>     --- a/include/istream
>>     +++ b/include/istream
>>     @@ -1069,16 +1069,18 @@ basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n, char_typ
>>                      this->rdbuf()->sbumpc();
>>                      ++__gc_;
>>                  }
>>     -            if (__n > 0)
>>     -                *__s = char_type();
>>                  if (__gc_ == 0)
>>                     __err |= ios_base::failbit;
>>                  this->setstate(__err);
>>              }
>>     +        if (__n > 0)
>>     +            *__s = char_type();
>>      #ifndef _LIBCPP_NO_EXCEPTIONS
>>          }
>>          catch (...)
>>          {
>>     +        if (__n > 0)
>>     +            *__s = char_type();
>>              this->__set_badbit_and_consider_rethrow();
>>          }
>>      #endif  // _LIBCPP_NO_EXCEPTIONS

A testcase would be good. It should go somewhere in libcxx/test/libcxx, 
since it will be testing a feature not required by the standard.


Jon

>>     --
>>     2.14.1
>>
>>     _______________________________________________
>>     cfe-dev mailing list
>>     cfe-dev at lists.llvm.org
>>     https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Ddev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=95AJ9O-xGF4otV8l7rSJB5hfLhWipgF4HSBqW_3JVTE&s=rySnF8MixjXB7ean9Q0m80CHp4mVxvRnvCj3g6O_hSU&e=
>>
>>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
> 

-- 
Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded / Siemens



More information about the cfe-dev mailing list