Forum: Ruby-core gdbm truncated UTF-8 data problem

F1d6cc2b735bfd82c8773172da2aeab9?d=identicon&s=25 Nobuyoshi Nakada (nobu)
on 2014-08-06 05:56
(Received via mailing list)
Issue #10111 has been updated by Nobuyoshi Nakada.


KiHyun Kang wrote:
> Nobuyoshi Nakada wrote:
> > gdbm doesn't preserve encodings now.
>
> gdbm doesn't have to preserve encodings.

~~~
$ ./ruby -v -rgdbm -e 'data = "\xEA\xB0\x80ABCDEF"' -e 'db =
GDBM.new("test.db", 0666)' -e 'db["key"] = data' -e 'p db["key"] ==
data.b'
ruby 2.1.2p195 (2014-08-04 revision 47056) [x86_64-darwin13.0]
true
~~~

> ext/dbm works well but ext/gdbm because ext/gdbm is using 'length' to get size.
>
> 'length' is not suitable to determine actual size.
>
> use 'bytesize' instead of 'length'.

I can't understand what you mean at all.

----------------------------------------
Bug #10111: gdbm truncated UTF-8 data problem
https://bugs.ruby-lang.org/issues/10111#change-48212

* Author: KiHyun Kang
* Status: Open
* Priority: Normal
* Assignee: Aaron Patterson
* Category: ext
* Target version:
* ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Reproducible script is here.

~~~
# coding: utf-8
require 'gdbm'

data = "\xEA\xB0\x80ABCDEF"
db = GDBM.new( 'test.db', 0666 )
db['key'] = data

throw 'data truncated!!' if db['key'] != data
~~~
This topic is locked and can not be replied to.