[前][次][番号順一覧][スレッド一覧]

ruby-changes:39102

From: normal <ko1@a...>
Date: Tue, 7 Jul 2015 16:46:50 +0900 (JST)
Subject: [ruby-changes:39102] normal:r51183 (trunk): random.c: fix failures on old Linux

normal	2015-07-07 16:46:29 +0900 (Tue, 07 Jul 2015)

  New Revision: 51183

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=51183

  Log:
    random.c: fix failures on old Linux
    
    This follows the behavior of fill_random_bytes_urandom and fixes
    the following failures I encountered on my old machine:
    
    1) Error:
    TestSecureRandom#test_s_random_bytes_without_openssl:
    NotImplementedError: No random device
        $RUBYDIR/lib/securerandom.rb:66:in `gen_random'
        $RUBYDIR/lib/securerandom.rb:94:in `random_bytes'
        $RUBYDIR/test/test_securerandom.rb:12:in `test_s_random_bytes'
        $RUBYDIR/test/test_securerandom.rb:97:in `block in test_s_random_bytes_without_openssl'
        $RUBYDIR/lib/tmpdir.rb:88:in `mktmpdir'
        $RUBYDIR/test/test_securerandom.rb:85:in `test_s_random_bytes_without_openssl'
    
      2) Error:
    TestSecureRandom#test_s_urlsafe_base64:
    NotImplementedError: No random device
        $RUBYDIR/lib/securerandom.rb:66:in `gen_random'
        $RUBYDIR/lib/securerandom.rb:94:in `random_bytes'
        $RUBYDIR/lib/securerandom.rb:164:in `urlsafe_base64'
        $RUBYDIR/test/test_securerandom.rb:131:in `block in test_s_urlsafe_base64'
        $RUBYDIR/test/test_securerandom.rb:130:in `times'
        $RUBYDIR/test/test_securerandom.rb:130:in `test_s_urlsafe_base64'
    
      3) Error:
    TestSecureRandom#test_uuid:
    NotImplementedError: No random device
        $RUBYDIR/lib/securerandom.rb:66:in `gen_random'
        $RUBYDIR/lib/securerandom.rb:94:in `random_bytes'
        $RUBYDIR/lib/securerandom.rb:230:in `uuid'
        $RUBYDIR/test/test_securerandom.rb:160:in `test_uuid'
    
    * random.c (fill_random_bytes_syscall): return -1 for error
    * random.c (fill_random_bytes): try urandom on syscall failure

  Modified files:
    trunk/ChangeLog
    trunk/random.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 51182)
+++ ChangeLog	(revision 51183)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Tue Jul  7 16:39:04 2015  Eric Wong  <e@8...>
+
+	* random.c (fill_random_bytes_syscall): return -1 for error
+	* random.c (fill_random_bytes): try urandom on syscall failure
+
 Tue Jul  7 15:02:18 2015  Nobuyoshi Nakada  <nobu@r...>
 
 	* file.c (rb_str_normalize_ospath): skip invalid byte sequence not
Index: random.c
===================================================================
--- random.c	(revision 51182)
+++ random.c	(revision 51183)
@@ -529,7 +529,7 @@ fill_random_bytes_syscall(void *seed, si https://github.com/ruby/ruby/blob/trunk/random.c#L529
 	    }
 	if ((size_t)ret == size) return 0;
     }
-    return 0;
+    return -1;
 }
 #else
 # define fill_random_bytes_syscall(seed, size) -1
@@ -539,7 +539,7 @@ static int https://github.com/ruby/ruby/blob/trunk/random.c#L539
 fill_random_bytes(void *seed, size_t size)
 {
     int ret = fill_random_bytes_syscall(seed, size);
-    if (ret) return ret;
+    if (ret == 0) return ret;
     return fill_random_bytes_urandom(seed, size);
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]