[or-cvs] r18191: {tor} backport r18189. what could go wrong? (in tor/branches/tor-0_2_0-patches: . src/common)

arma at seul.org arma at seul.org
Tue Jan 20 23:02:47 UTC 2009


Author: arma
Date: 2009-01-20 18:02:46 -0500 (Tue, 20 Jan 2009)
New Revision: 18191

Modified:
   tor/branches/tor-0_2_0-patches/ChangeLog
   tor/branches/tor-0_2_0-patches/configure.in
   tor/branches/tor-0_2_0-patches/src/common/compat.c
   tor/branches/tor-0_2_0-patches/src/common/compat.h
   tor/branches/tor-0_2_0-patches/src/common/container.c
   tor/branches/tor-0_2_0-patches/src/common/util.c
Log:
backport r18189. what could go wrong?


Modified: tor/branches/tor-0_2_0-patches/ChangeLog
===================================================================
--- tor/branches/tor-0_2_0-patches/ChangeLog	2009-01-20 22:55:23 UTC (rev 18190)
+++ tor/branches/tor-0_2_0-patches/ChangeLog	2009-01-20 23:02:46 UTC (rev 18191)
@@ -79,7 +79,8 @@
       Fixes another case of bug 619. Patch from rovv.
     - When a relay gets a create cell it can't decrypt (e.g. because it's
       using the wrong onion key), we were dropping it and letting the
-      client time out. Now actually answer with a destroy cell. Fixes                 bug 904. Bugfix on 0.0.2pre8.
+      client time out. Now actually answer with a destroy cell. Fixes
+      bug 904. Bugfix on 0.0.2pre8.
 
   o Minor bugfixes (hidden services):
     - Do not throw away existing introduction points on SIGHUP. Bugfix on

Modified: tor/branches/tor-0_2_0-patches/configure.in
===================================================================
--- tor/branches/tor-0_2_0-patches/configure.in	2009-01-20 22:55:23 UTC (rev 18190)
+++ tor/branches/tor-0_2_0-patches/configure.in	2009-01-20 23:02:46 UTC (rev 18191)
@@ -304,7 +304,7 @@
 
 AC_SYS_LARGEFILE
 
-AC_CHECK_HEADERS(unistd.h string.h signal.h ctype.h sys/stat.h sys/types.h fcntl.h sys/fcntl.h sys/time.h errno.h assert.h time.h, , AC_MSG_WARN(Some headers were not found, compilation may fail.  If compilation succeeds, please send your orconfig.h to the developers so we can fix this warning.))
+AC_CHECK_HEADERS(unistd.h string.h signal.h sys/stat.h sys/types.h fcntl.h sys/fcntl.h sys/time.h errno.h assert.h time.h, , AC_MSG_WARN(Some headers were not found, compilation may fail.  If compilation succeeds, please send your orconfig.h to the developers so we can fix this warning.))
 
 AC_CHECK_HEADERS(netdb.h sys/ioctl.h sys/socket.h arpa/inet.h netinet/in.h pwd.h grp.h sys/un.h)
 

Modified: tor/branches/tor-0_2_0-patches/src/common/compat.c
===================================================================
--- tor/branches/tor-0_2_0-patches/src/common/compat.c	2009-01-20 22:55:23 UTC (rev 18190)
+++ tor/branches/tor-0_2_0-patches/src/common/compat.c	2009-01-20 23:02:46 UTC (rev 18191)
@@ -380,6 +380,61 @@
 #endif
 }
 
+/* Tables to implement ctypes-replacement TOR_IS*() functions.  Each table
+ * has 256 bits to look up whether a character is in some set or not.  This
+ * fails on non-ASCII platforms, but it is hard to find a platform whose
+ * character set is not a superset of ASCII nowadays. */
+const uint32_t const TOR_ISALPHA_TABLE[8] =
+  { 0, 0, 0x7fffffe, 0x7fffffe, 0, 0, 0, 0 };
+const uint32_t const TOR_ISALNUM_TABLE[8] =
+  { 0, 0x3ff0000, 0x7fffffe, 0x7fffffe, 0, 0, 0, 0 };
+const uint32_t const TOR_ISSPACE_TABLE[8] = { 0x3e00, 0x1, 0, 0, 0, 0, 0, 0 };
+const uint32_t const TOR_ISXDIGIT_TABLE[8] =
+  { 0, 0x3ff0000, 0x7e, 0x7e, 0, 0, 0, 0 };
+const uint32_t const TOR_ISDIGIT_TABLE[8] = { 0, 0x3ff0000, 0, 0, 0, 0, 0, 0 };
+const uint32_t const TOR_ISPRINT_TABLE[8] =
+  { 0, 0xffffffff, 0xffffffff, 0x7fffffff, 0, 0, 0, 0x0 };
+const uint32_t const TOR_ISUPPER_TABLE[8] = { 0, 0, 0x7fffffe, 0, 0, 0, 0, 0 };
+const uint32_t const TOR_ISLOWER_TABLE[8] = { 0, 0, 0, 0x7fffffe, 0, 0, 0, 0 };
+/* Upper-casing and lowercasing tables to map characters to upper/lowercase
+ * equivalents. */
+const char const TOR_TOUPPER_TABLE[256] = {
+  0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+  16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
+  32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
+  48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
+  64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
+  80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
+  96,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
+  80,81,82,83,84,85,86,87,88,89,90,123,124,125,126,127,
+  128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
+  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
+  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
+  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
+  192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
+  208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
+  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
+  240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
+};
+const char const TOR_TOLOWER_TABLE[256] = {
+  0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+  16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
+  32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
+  48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
+  64,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
+  112,113,114,115,116,117,118,119,120,121,122,91,92,93,94,95,
+  96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
+  112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
+  128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
+  144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
+  160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
+  176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
+  192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
+  208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
+  224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
+  240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
+};
+
 #ifdef MS_WINDOWS
 /** Take a filename and return a pointer to its final element.  This
  * function is called on __FILE__ to fix a MSVC nit where __FILE__

Modified: tor/branches/tor-0_2_0-patches/src/common/compat.h
===================================================================
--- tor/branches/tor-0_2_0-patches/src/common/compat.h	2009-01-20 22:55:23 UTC (rev 18190)
+++ tor/branches/tor-0_2_0-patches/src/common/compat.h	2009-01-20 23:02:46 UTC (rev 18191)
@@ -33,9 +33,6 @@
 #ifdef HAVE_STRING_H
 #include <string.h>
 #endif
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
 #include <stdarg.h>
 #ifdef HAVE_SYS_RESOURCE_H
 #include <sys/resource.h>
@@ -217,18 +214,28 @@
   return tor_memmem(haystack, hlen, needle, strlen(needle));
 }
 
-#define TOR_ISALPHA(c)   isalpha((int)(unsigned char)(c))
-#define TOR_ISALNUM(c)   isalnum((int)(unsigned char)(c))
-#define TOR_ISSPACE(c)   isspace((int)(unsigned char)(c))
-#define TOR_ISXDIGIT(c) isxdigit((int)(unsigned char)(c))
-#define TOR_ISDIGIT(c)   isdigit((int)(unsigned char)(c))
-#define TOR_ISPRINT(c)   isprint((int)(unsigned char)(c))
-#define TOR_ISLOWER(c)   islower((int)(unsigned char)(c))
-#define TOR_ISUPPER(c)   isupper((int)(unsigned char)(c))
+/* Much of the time when we're checking ctypes, we're doing spec compliance,
+ * which all assumes we're doing ASCII. */
+#define DECLARE_CTYPE_FN(name)                                          \
+  static int TOR_##name(char c);                                        \
+  extern const uint32_t const TOR_##name##_TABLE[];                     \
+  static INLINE int TOR_##name(char c) {                                \
+    uint8_t u = c;                                                      \
+    return !!(TOR_##name##_TABLE[(u >> 5) & 7] & (1 << (u & 31)));      \
+  }
+DECLARE_CTYPE_FN(ISALPHA)
+DECLARE_CTYPE_FN(ISALNUM)
+DECLARE_CTYPE_FN(ISSPACE)
+DECLARE_CTYPE_FN(ISDIGIT)
+DECLARE_CTYPE_FN(ISXDIGIT)
+DECLARE_CTYPE_FN(ISPRINT)
+DECLARE_CTYPE_FN(ISLOWER)
+DECLARE_CTYPE_FN(ISUPPER)
+extern const char const TOR_TOUPPER_TABLE[];
+extern const char const TOR_TOLOWER_TABLE[];
+#define TOR_TOLOWER(c) (TOR_TOLOWER_TABLE[(uint8_t)c])
+#define TOR_TOUPPER(c) (TOR_TOUPPER_TABLE[(uint8_t)c])
 
-#define TOR_TOLOWER(c)   ((char)tolower((int)(unsigned char)(c)))
-#define TOR_TOUPPER(c)   ((char)toupper((int)(unsigned char)(c)))
-
 #ifdef MS_WINDOWS
 #define _SHORT_FILE_ (tor_fix_source_file(__FILE__))
 const char *tor_fix_source_file(const char *fname);

Modified: tor/branches/tor-0_2_0-patches/src/common/container.c
===================================================================
--- tor/branches/tor-0_2_0-patches/src/common/container.c	2009-01-20 22:55:23 UTC (rev 18190)
+++ tor/branches/tor-0_2_0-patches/src/common/container.c	2009-01-20 23:02:46 UTC (rev 18191)
@@ -20,9 +20,6 @@
 #include "container.h"
 #include "crypto.h"
 
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>

Modified: tor/branches/tor-0_2_0-patches/src/common/util.c
===================================================================
--- tor/branches/tor-0_2_0-patches/src/common/util.c	2009-01-20 22:55:23 UTC (rev 18190)
+++ tor/branches/tor-0_2_0-patches/src/common/util.c	2009-01-20 23:02:46 UTC (rev 18191)
@@ -31,9 +31,6 @@
 #include <pwd.h>
 #endif
 
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>



More information about the tor-commits mailing list