- Add a bunch of hints for Privoxy-Regression-Test.
[privoxy.git] / miscutil.c
index 22776d8..462eb83 100644 (file)
@@ -1,4 +1,4 @@
-const char miscutil_rcs[] = "$Id: miscutil.c,v 1.52 2007/08/19 12:32:34 fabiankeil Exp $";
+const char miscutil_rcs[] = "$Id: miscutil.c,v 1.56 2007/12/01 12:59:05 fabiankeil Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/miscutil.c,v $
@@ -44,6 +44,21 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.52 2007/08/19 12:32:34 fabianke
  *
  * Revisions   :
  *    $Log: miscutil.c,v $
+ *    Revision 1.56  2007/12/01 12:59:05  fabiankeil
+ *    Some sanity checks for pick_from_range().
+ *
+ *    Revision 1.55  2007/11/03 17:34:49  fabiankeil
+ *    Log the "weak randomization factor" warning only
+ *    once for mingw32 and provide some more details.
+ *
+ *    Revision 1.54  2007/09/19 20:28:37  fabiankeil
+ *    If privoxy_strlcpy() is called with a "buffer" size
+ *    of 0, don't touch whatever destination points to.
+ *
+ *    Revision 1.53  2007/09/09 18:20:20  fabiankeil
+ *    Turn privoxy_strlcpy() into a function and try to work with
+ *    b0rked snprintf() implementations too. Reported by icmp30.
+ *
  *    Revision 1.52  2007/08/19 12:32:34  fabiankeil
  *    Fix a conversion warning.
  *
@@ -850,14 +865,14 @@ int simplematch(char *pattern, char *text)
                {
                   return(1);
                }
-               for(i = lastchar; i <= *pat; i++)
+               for (i = lastchar; i <= *pat; i++)
                {
-                  charmap[i / 8] |= (1 << (i % 8));
+                  charmap[i / 8] |= (unsigned char)(1 << (i % 8));
                } 
             }
             else
             {
-               charmap[*pat / 8] |= (1 << (*pat % 8));
+               charmap[*pat / 8] |= (unsigned char)(1 << (*pat % 8));
                lastchar = *pat;
             }
          }
@@ -1080,6 +1095,12 @@ char * make_path(const char * dir, const char * file)
 long int pick_from_range(long int range)
 {
    long int number;
+
+   assert(range != 0);
+   assert(range > 0);
+
+   if (range <= 0) return 0;
+
 #ifdef HAVE_RANDOM
    number = random() % range + 1; 
 #elif defined(FEATURE_PTHREAD)
@@ -1095,8 +1116,9 @@ long int pick_from_range(long int range)
     *
     * Currently we don't have mutexes for mingw32, and for
     * our purpose this cludge is probably preferable to crashes.
+    *
+    * The warning is shown once on startup from jcc.c.
     */
-   log_error(LOG_LEVEL_INFO, "No thread-safe PRNG available? Using weak \'randomization\' factor.");
    number = (range + GetCurrentThreadId() % range) / 2;
 #else
    /*
@@ -1111,7 +1133,7 @@ long int pick_from_range(long int range)
 
 #endif /* (def HAVE_RANDOM) */
 
-   return (number);
+   return number;
 }
 
 
@@ -1132,16 +1154,18 @@ long int pick_from_range(long int range)
  *********************************************************************/
 size_t privoxy_strlcpy(char *destination, const char *source, const size_t size)
 {
-   snprintf(destination, size, "%s", source);
-   /*
-    * Platforms that lack strlcpy() also tend to have
-    * a broken snprintf implementation that doesn't
-    * guarantee nul termination.
-    *
-    * XXX: the configure script should detect and reject those.
-    */
-   destination[(size > 1) ? size-1 : 0] = '\0';
-
+   if (0 < size)
+   {
+      snprintf(destination, size, "%s", source);
+      /*
+       * Platforms that lack strlcpy() also tend to have
+       * a broken snprintf implementation that doesn't
+       * guarantee nul termination.
+       *
+       * XXX: the configure script should detect and reject those.
+       */
+      destination[size-1] = '\0';
+   }
    return strlen(source);
 }
 #endif /* def USE_PRIVOXY_STRLCPY */