ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: normalperson@yhbt.net
To: ruby-core@ruby-lang.org
Subject: [ruby-core:66410] [ruby-trunk - Feature #8543] rb_iseq_load
Date: Sat, 22 Nov 2014 08:28:27 +0000	[thread overview]
Message-ID: <redmine.journal-50047.20141122082826.b925dcb3db639fed@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-8543.20130619213935@ruby-lang.org

Issue #8543 has been updated by Eric Wong.


 billk@cts.com wrote:
 > But ultimately, the result of the manual bisect was:
 > 
 > 66d247bcb50a29769ff940100223544c125521aa is the first bad commit
 > commit 66d247bcb50a29769ff940100223544c125521aa
 > Author: ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
 > Date:   Tue Apr 24 09:20:42 2012 +0000
 > 
 >     * compile.c: fix to output warning when the same literals
 >       are available as a condition of same case clause.
 >       And remove infomation ('#n') because we can find duplicated
 >       condition with explicit line numbers.
 >       [ruby-core:38343] [Ruby 1.9 - Bug #5068]
 >     * test/ruby/test_syntax.rb: add a test for above.
 
 That was only one of the breakages :)
 Things have bitrotted a lot over the years.
 
 The following patch might be ready to commit to trunk:
 
    http://80x24.org/spew/m/rb_iseq_load_fix@v1.txt
 
 It's better than the complete breakage we have right now, so I might
 commit the above in a few days.  The new test case I added should
 help (or force) other core committers to maintain iseq loading,
 though.
 
 There's no public API change in this version of my patch.
 
 The test cases are probably not complete, though.  I am mainly
 interested in the feature because I'm working on another (in-core)
 optimization which may utilize this.
 
 I can definitely use some help thinking of better test cases since I
 don't believe I remember all of Ruby syntax :x

----------------------------------------
Feature #8543: rb_iseq_load
https://bugs.ruby-lang.org/issues/8543#change-50047

* Author: Alexey Voskov
* Status: Open
* Priority: Low
* Assignee: Koichi Sasada
* Category: YARV
* Target version: current: 2.2.0
----------------------------------------
I noticed an unusual behaviour of undocumented rb_iseq_load function. 
Its work differs in different Ruby versions. I'm trying to protect some Ruby
source code by its conversion to YARV p-code and using the next strategy:

1. Convert code to array

   ~~~ruby
   data = RubyVM::InstructionSequence.compile_file('hello.rb').to_a
   ~~~

2. Pass a compiled source to the rb_iseq_load function and evaluate it

   ~~~ruby
   iseq = iseq_load.(data)
   iseq.eval
   ~~~

Sample programs are supplied in the attachments.
"hello.rb"

```ruby
puts "tralivali"
def funct(a,b)
  a**b
end

3.times { |i|
  puts "Hello, world#{funct(2,i)}!"
}
```

The differences
Ruby 1.9.3 (ruby 1.9.3p194 (2012-04-20) [i386-mingw32])
Correct work. Output:

```
tralivali
Hello, world1!
Hello, world2!
Hello, world4!
```

Ruby 2.0.0 (ruby 2.0.0p193 (2013-05-14) [x64-mingw32])
Incorrect work (omits the code inside code blocks). Output

```
tralivali
```

Attempts of loading bigger programs by means of rb_iseq_load in Ruby 2.0.0 usually ends with a segmentation fault.

Such behaviour also can be reproduced by means of iseq Ruby extension ("for iseq freaks")
https://github.com/wanabe/iseq

P.S. I understand that it is an undocumented feature.


---Files--------------------------------
hello.rb (102 Bytes)
rb_pack.rb (931 Bytes)
iseq-load-test3.rb (210 Bytes)
iseq-load-test3-file.rb (369 Bytes)
please-fix-rb_iseq_load-thank-you.pdf (444 KB)


-- 
https://bugs.ruby-lang.org/

  parent reply	other threads:[~2014-11-22  8:38 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-19 12:39 [ruby-core:55557] [ruby-trunk - misc #8543][Open] rb_iseq_load alvoskov (Alexey Voskov)
2013-06-20  7:40 ` [ruby-core:55568] [ruby-trunk - Bug #8543] rb_iseq_load nagachika (Tomoyuki Chikanaga)
2014-01-30  6:17 ` [ruby-core:60299] " shibata.hiroshi
2014-04-16  8:25 ` [ruby-core:62050] " billk
2014-04-16 10:21 ` [ruby-core:62052] " billk
2014-06-26 23:40 ` [ruby-core:63353] " billk
2014-06-30  8:07 ` [ruby-core:63427] " naruse
2014-07-26  5:42 ` [ruby-core:64033] " ko1
2014-07-26  5:46 ` [ruby-core:64034] [ruby-trunk - Feature " nobu
2014-10-09  7:18 ` [ruby-core:65555] " billk
2014-10-09  7:44   ` [ruby-core:65556] " Eric Wong
2014-10-09  7:51 ` [ruby-core:65557] " normalperson
2014-10-09 23:44 ` [ruby-core:65574] " billk
2014-11-22  0:03   ` [ruby-core:66402] " Eric Wong
2014-11-22  1:06     ` [ruby-core:66404] " Eric Wong
2014-11-22  8:19   ` [ruby-core:66409] " Eric Wong
2014-11-23  5:56     ` [ruby-core:66423] " Eric Wong
2014-11-22  0:08 ` [ruby-core:66403] " normalperson
2014-11-22  1:08 ` [ruby-core:66405] " normalperson
2014-11-22  8:28 ` normalperson [this message]
2014-11-23  5:58 ` [ruby-core:66424] " normalperson
2014-11-24 23:13 ` [ruby-core:66446] " billk
2014-11-25  2:01   ` [ruby-core:66450] " Eric Wong
2014-11-25  2:08 ` [ruby-core:66451] " normalperson
2014-11-25  3:09 ` [ruby-core:66452] " billk
2014-11-25  8:19 ` [ruby-core:66456] " ko1
2014-11-26  1:38   ` [ruby-core:66465] " Eric Wong
2014-11-26  1:48 ` [ruby-core:66467] " normalperson
2014-11-26  6:49 ` [ruby-core:66472] " ko1
2014-11-26  8:09   ` [ruby-core:66476] " Eric Wong
2014-11-26  8:18 ` [ruby-core:66478] " normalperson
2014-11-27  3:02   ` [ruby-core:66508] " Eric Wong
2014-11-27  3:08 ` [ruby-core:66510] " normalperson
2014-11-29 11:55 ` [ruby-core:66566] " s.wanabe
2014-12-01 22:35   ` [ruby-core:66633] " Eric Wong
2014-12-01 22:38 ` [ruby-core:66634] " normalperson
2014-12-19 21:15   ` [ruby-core:66987] " Eric Wong
2014-12-19 21:18 ` [ruby-core:66988] " normalperson
2015-09-09 23:27 ` [ruby-core:70708] [Ruby trunk - Feature #8543] new rb_iseq_load crash billk
2015-09-10  0:09 ` [ruby-core:70709] " billk
2015-09-10 14:12 ` [ruby-core:70711] [Ruby trunk - Bug " nagachika00
2015-09-10 16:42   ` [ruby-core:70713] " Bill Kelly
2015-09-10 16:54     ` [ruby-core:70714] " U.NAKAMURA
2015-09-10 17:14       ` [ruby-core:70715] " Bill Kelly
2015-09-11  1:35     ` [ruby-core:70722] " Nobuyoshi Nakada
2015-11-24 15:43 ` [ruby-core:71653] " nagachika00
2015-12-08  3:11 ` [ruby-core:71930] " usa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-50047.20141122082826.b925dcb3db639fed@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).