Skip to content
Snippets Groups Projects
  1. Sep 28, 2019
  2. Sep 17, 2019
  3. Sep 10, 2019
  4. Sep 09, 2019
    • Anna Wilcox's avatar
      system/ruby: libedit compatibility patch [read:] · ee8cd5c2
      Anna Wilcox authored
      Ruby pretends editline (libedit) is readline.  This is normally fine.
      However, editline's readline emulation does not account for changes to
      rl_instream or rl_outstream.  If a Ruby application using the Readline
      extension changes .input or .output, this will cause a use-after-free:
      
      ==32694== Invalid read of size 4
      ==32694==    at 0x4070A38: fwrite (fwrite.c:32)
      ==32694==    by 0x406F707: fputs (fputs.c:7)
      ==32694==    by 0x660EAC7: el_wgets (in /usr/lib/libedit.so.0.0.60)
      ==32694==    by 0x6607BDB: el_gets (in /usr/lib/libedit.so.0.0.60)
      ==32694==    by 0x6620EDB: readline (in /usr/lib/libedit.so.0.0.60)
      ==32694==    by 0x65DE3D3: readline_get (readline.c:346)
      ==32694==    by 0x4DFA49B: rb_protect (eval.c:996)
      ==32694==    by 0x65DE4FF: readline_readline (readline.c:507)
      ==32694==    by 0x4F7AD4B: call_cfunc_m1 (vm_insnhelper.c:1723)
      ==32694==  Address 0x67503dc is 140 bytes inside a block of size 1,264 free'd
      ==32694==    at 0x490AFC0: free (in /usr/lib/valgrind/vgpreload_memcheck-ppc64be-linux.so)
      ==32694==    by 0x406D44F: fclose (fclose.c:35)
      ==32694==    by 0x65DE013: clear_rl_outstream (readline.c:365)
      ==32694==    by 0x65DE0DF: readline_s_set_output (readline.c:599)
      ==32694==  Block was alloc'd at
      ==32694==    at 0x49092C0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-ppc64be-linux.so)
      ==32694==    by 0x406BEC7: fdopen (__fdopen.c:21)
      ==32694==    by 0x65DE103: readline_s_set_output (readline.c:603)
      
      Since rl_instream and rl_outstream are read on each rl_initialize, and
      editline's rl_initialize is smart enough to not leak memory if it is
      called multiple times during program execution, we use this as a way to
      force re-reading of rl_instream and rl_outstream.
      
      I hate this patch; I really do.  Better fixes are highly welcome.
      Verified
      ee8cd5c2
  5. Aug 23, 2019
  6. Aug 20, 2019
  7. Aug 19, 2019
  8. Aug 18, 2019
  9. Aug 17, 2019
Loading