-
Notifications
You must be signed in to change notification settings - Fork 180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Replaced StringValuePtr to StringValueCStr #5
Conversation
Thank you for the bug report! You're right in respect to Could you please post some code that triggered the error message for you? We need a test cast before we do any changes. |
Thank you for you comment. If you could read Rails, this is very simple scaffold App. |
OK, I'll give it a try. Which OS are you using? And how did you install Ruby? |
Thank you. I reproduced this in OS X and Amazon Linux. Both Ruby were Installed by "rvm install ruby-head". I updated the README.doc slightly. Please read it. |
Your rails project is working great, but unfortunately I'm not able to reproduce the error on Ubuntu-14.04 running on a fresh ruby version installed by |
Thank you for your try. I pushed a project to Github. I tried this on ubuntu14.04(and PostgreSQL9.3 and today's Ruby) in AWS, and this showed the error. Could you try this please? |
might need to run "rake" twice. |
@ymmtmdk Now I get the same error raised on Ubuntu-14.04. I couldn't find out easily, which Ruby construct builds non zero terminated String objects, nor whether this behavior is really desired. But the README.ext is quite clear about zero termination, so I scanned my type cast branch for interesting cases and fixed it accordingly. I hope we can merge it soon, or we need to backport the commit elsewise. |
I asked how to create not null terminated string at ruby-dev ML. Comitter naruse-san said, it can not be in Ruby but can do it in an extension. And he showed to me the code http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/48598 So, I have created a Gem https://github.com/ymmtmdk/not_null_terminated
|
Cool! I'll use your gem to write proper test cases for ruby-pg. |
Thank you. Naruse-san and bundler are really cool. : ) |
Is there any update? |
This is fixed in commit https://bitbucket.org/ged/ruby-pg/commits/f0b7f99 and released as part of pg-0.18.0. |
thank you! @larskanis |
I'm still seeing this error in a Rails project using 0.18.1. Any ideas? |
Same here. |
@mtarnovan , @JacobEvelyn could you please put a stacktrace of the failure into a gist? |
Looks like I was only getting this error when trying to save binary data to a |
Ruby-2.2 changes the String handling in such a way, that strings can no longer be expected to be zero terminated. When zero terminated strings are expected in the C code, StringValueCStr() must be used. See: https://github.com/ruby/ruby/blob/v2_2_0/NEWS#L319 Using StringValuePtr() without a length check, can also become a security issue, because it can leak the memory after the string. This was already an issue in the pg.gem: ged/ruby-pg#5
Ruby-2.2 changes the String handling in such a way, that strings can no longer be expected to be zero terminated. When zero terminated strings are expected in the C code, StringValueCStr() must be used. See: https://github.com/ruby/ruby/blob/v2_2_0/NEWS#L319 Using StringValuePtr() without a length check, can also become a security issue, because it can leak the memory after the string. This was already an issue in the pg.gem: ged/ruby-pg#5
On ruby-head environment, I got the following error:
PG::CharacterNotInRepertoire: ERROR: invalid byte sequence for encoding "UTF8": 0xe0 0x0c 0xf7
I researched the code and found it may occured by not terminated C string.
In Ruby’s README.ext,
So, I made this patch and solved the error.
Is this right?