backport r18189. what could go wrong?

svn:r18191
This commit is contained in:
Roger Dingledine 2009-01-20 23:02:46 +00:00
parent 5954698422
commit ed899730e7
6 changed files with 79 additions and 22 deletions

View File

@ -79,7 +79,8 @@ Changes in version 0.2.0.33 - 2009-01-??
Fixes another case of bug 619. Patch from rovv. 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 - 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 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): o Minor bugfixes (hidden services):
- Do not throw away existing introduction points on SIGHUP. Bugfix on - Do not throw away existing introduction points on SIGHUP. Bugfix on

View File

@ -304,7 +304,7 @@ dnl Make sure to enable support for large off_t if available.
AC_SYS_LARGEFILE 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) AC_CHECK_HEADERS(netdb.h sys/ioctl.h sys/socket.h arpa/inet.h netinet/in.h pwd.h grp.h sys/un.h)

View File

@ -380,6 +380,61 @@ tor_memmem(const void *_haystack, size_t hlen,
#endif #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 #ifdef MS_WINDOWS
/** Take a filename and return a pointer to its final element. This /** Take a filename and return a pointer to its final element. This
* function is called on __FILE__ to fix a MSVC nit where __FILE__ * function is called on __FILE__ to fix a MSVC nit where __FILE__

View File

@ -33,9 +33,6 @@
#ifdef HAVE_STRING_H #ifdef HAVE_STRING_H
#include <string.h> #include <string.h>
#endif #endif
#ifdef HAVE_CTYPE_H
#include <ctype.h>
#endif
#include <stdarg.h> #include <stdarg.h>
#ifdef HAVE_SYS_RESOURCE_H #ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h> #include <sys/resource.h>
@ -217,17 +214,27 @@ tor_memstr(const void *haystack, size_t hlen, const char *needle)
return tor_memmem(haystack, hlen, needle, strlen(needle)); return tor_memmem(haystack, hlen, needle, strlen(needle));
} }
#define TOR_ISALPHA(c) isalpha((int)(unsigned char)(c)) /* Much of the time when we're checking ctypes, we're doing spec compliance,
#define TOR_ISALNUM(c) isalnum((int)(unsigned char)(c)) * which all assumes we're doing ASCII. */
#define TOR_ISSPACE(c) isspace((int)(unsigned char)(c)) #define DECLARE_CTYPE_FN(name) \
#define TOR_ISXDIGIT(c) isxdigit((int)(unsigned char)(c)) static int TOR_##name(char c); \
#define TOR_ISDIGIT(c) isdigit((int)(unsigned char)(c)) extern const uint32_t const TOR_##name##_TABLE[]; \
#define TOR_ISPRINT(c) isprint((int)(unsigned char)(c)) static INLINE int TOR_##name(char c) { \
#define TOR_ISLOWER(c) islower((int)(unsigned char)(c)) uint8_t u = c; \
#define TOR_ISUPPER(c) isupper((int)(unsigned char)(c)) return !!(TOR_##name##_TABLE[(u >> 5) & 7] & (1 << (u & 31))); \
}
#define TOR_TOLOWER(c) ((char)tolower((int)(unsigned char)(c))) DECLARE_CTYPE_FN(ISALPHA)
#define TOR_TOUPPER(c) ((char)toupper((int)(unsigned char)(c))) 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])
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
#define _SHORT_FILE_ (tor_fix_source_file(__FILE__)) #define _SHORT_FILE_ (tor_fix_source_file(__FILE__))

View File

@ -20,9 +20,6 @@ const char container_c_id[] =
#include "container.h" #include "container.h"
#include "crypto.h" #include "crypto.h"
#ifdef HAVE_CTYPE_H
#include <ctype.h>
#endif
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>

View File

@ -31,9 +31,6 @@ const char util_c_id[] = "$Id$";
#include <pwd.h> #include <pwd.h>
#endif #endif
#ifdef HAVE_CTYPE_H
#include <ctype.h>
#endif
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>