[#7872] Nonblocking socket-connect — "Francis Cianfrocca" <garbagecat10@...>

All, I needed a nonblocking socket connect for my asynchronous-event

18 messages 2006/05/14
[#7873] Re: Nonblocking socket-connect — Tanaka Akira <akr@...17n.org> 2006/05/14

In article <3a94cf510605140559l7baa0205le341dac4f47d424b@mail.gmail.com>,

[#7874] Re: Nonblocking socket-connect — "Francis Cianfrocca" <garbagecat10@...> 2006/05/15

How about introducing the method Socket#set_nonblocking, or alternatively

[#7875] Re: Nonblocking socket-connect — Yukihiro Matsumoto <matz@...> 2006/05/15

Hi,

[#7876] Re: Nonblocking socket-connect — "Francis Cianfrocca" <garbagecat10@...> 2006/05/15

Well, it's ok then. I'm comfortable adding in the nonblocking

[#7877] Re: Nonblocking socket-connect — Yukihiro Matsumoto <matz@...> 2006/05/15

Hi,

Coverity CID 14 15 Patch

From: Kevin Tew <tewk@...>
Date: 2006-05-06 17:28:58 UTC
List: ruby-core #7837
Both errors stem from the possibility of returning a -1, which signals 
an error condition.
I fixed it so that it silently returns without possibly doing an invalid 
memory read.

Is there a more appropriate way to signal an error or throw an exception 
in these cases?

Comments suggestions welcome.

Kevin Tew

Attachments (1)

regparse.patch (4.47 KB, text/x-diff)
Index: regparse.c
===================================================================
RCS file: /src/ruby/regparse.c,v
retrieving revision 1.25
diff -u -r1.25 regparse.c
--- regparse.c	23 Mar 2006 12:08:08 -0000	1.25
+++ regparse.c	6 May 2006 16:58:46 -0000
@@ -2152,38 +2152,41 @@
   pnum = popular_qualifier_num(p);
   cnum = popular_qualifier_num(c);
 
-  switch(ReduceTypeTable[cnum][pnum]) {
-  case RQ_DEL:
-    *p = *c;
-    break;
-  case RQ_A:
-    p->target = c->target;
-    p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 1;
-    break;
-  case RQ_AQ:
-    p->target = c->target;
-    p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 0;
-    break;
-  case RQ_QQ:
-    p->target = c->target;
-    p->lower  = 0;  p->upper = 1;  p->greedy = 0;
-    break;
-  case RQ_P_QQ:
-    p->target = cnode;
-    p->lower  = 0;  p->upper = 1;  p->greedy = 0;
-    c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 1;
-    return ;
-    break;
-  case RQ_PQ_Q:
-    p->target = cnode;
-    p->lower  = 0;  p->upper = 1;  p->greedy = 1;
-    c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 0;
-    return ;
-    break;
-  case RQ_ASIS:
-    p->target = cnode;
-    return ;
-    break;
+  if (pnum >= 0 && cnum >= 0 )
+  {
+    switch(ReduceTypeTable[cnum][pnum]) {
+      case RQ_DEL:
+        *p = *c;
+        break;
+      case RQ_A:
+        p->target = c->target;
+        p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 1;
+        break;
+      case RQ_AQ:
+        p->target = c->target;
+        p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 0;
+        break;
+      case RQ_QQ:
+        p->target = c->target;
+        p->lower  = 0;  p->upper = 1;  p->greedy = 0;
+        break;
+      case RQ_P_QQ:
+        p->target = cnode;
+        p->lower  = 0;  p->upper = 1;  p->greedy = 0;
+        c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 1;
+        return ;
+        break;
+      case RQ_PQ_Q:
+        p->target = cnode;
+        p->lower  = 0;  p->upper = 1;  p->greedy = 1;
+        c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 0;
+        return ;
+        break;
+      case RQ_ASIS:
+        p->target = cnode;
+        return ;
+        break;
+    }
   }
 
   c->target = NULL_NODE;
@@ -4532,32 +4535,34 @@
 
         nestq_num   = popular_qualifier_num(qn);
         targetq_num = popular_qualifier_num(qnt);
+        if ( nestq_num >= 0 && targetq_num >= 0 )
+        {
+          switch(ReduceTypeTable[targetq_num][nestq_num]) {
+            case RQ_ASIS:
+              break;
+
+            case RQ_DEL:
+              if (onig_verb_warn != onig_null_warn) {
+                onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
+                    env->pattern, env->pattern_end,
+                    (UChar* )"redundant nested repeat operator");
+                (*onig_verb_warn)((char* )buf);
+              }
+              goto warn_exit;
+              break;
 
-        switch(ReduceTypeTable[targetq_num][nestq_num]) {
-        case RQ_ASIS:
-          break;
-
-        case RQ_DEL:
-          if (onig_verb_warn != onig_null_warn) {
-            onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
-                                 env->pattern, env->pattern_end,
-                                 (UChar* )"redundant nested repeat operator");
-            (*onig_verb_warn)((char* )buf);
-          }
-          goto warn_exit;
-          break;
-
-        default:
-          if (onig_verb_warn != onig_null_warn) {
-            onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
-                                       env->pattern, env->pattern_end,
-            (UChar* )"nested repeat operator %s and %s was replaced with '%s'",
-            PopularQStr[targetq_num], PopularQStr[nestq_num],
-            ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);
-            (*onig_verb_warn)((char* )buf);
+            default:
+              if (onig_verb_warn != onig_null_warn) {
+                onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
+                    env->pattern, env->pattern_end,
+                    (UChar* )"nested repeat operator %s and %s was replaced with '%s'",
+                    PopularQStr[targetq_num], PopularQStr[nestq_num],
+                    ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);
+                (*onig_verb_warn)((char* )buf);
+              }
+              goto warn_exit;
+              break;
           }
-          goto warn_exit;
-          break;
         }
       }
 

In This Thread

Prev Next