Loading CHANGES +5 −1 Original line number Diff line number Diff line Loading @@ -4,6 +4,10 @@ Changes between 0.9.7c and 0.9.8 [xx XXX xxxx] *) Add the functions ERR_set_mark() and ERR_pop_to_mark() for better control of the error stack. [Richard Levitte] *) Add support for STORE in ENGINE. [Richard Levitte] Loading Loading @@ -662,7 +666,7 @@ yet to be integrated into this CVS branch: the config script, much like the NetBSD support. [Richard Levitte & Kris Kennaway <kris@obsecurity.org>] Changes between 0.9.6h and 0.9.7 [31 Dec 2002] Changes between 0.9.6j and 0.9.7 [31 Dec 2002] *) Fix session ID handling in SSLv2 client code: the SERVER FINISHED code (06) was taken as the first octet of the session ID and the last Loading crypto/err/err.c +46 −5 Original line number Diff line number Diff line Loading @@ -548,13 +548,24 @@ static void build_SYS_str_reasons() #endif #define err_clear_data(p,i) \ do { \ if (((p)->err_data[i] != NULL) && \ (p)->err_data_flags[i] & ERR_TXT_MALLOCED) \ { \ OPENSSL_free((p)->err_data[i]); \ (p)->err_data[i]=NULL; \ } \ (p)->err_data_flags[i]=0; (p)->err_data_flags[i]=0; \ } while(0) #define err_clear(p,i) \ do { \ es->err_flags[i]=0; \ es->err_buffer[i]=0; \ err_clear_data(p,i); \ es->err_file[i]=NULL; \ es->err_line[i]= -1; \ } while(0) static void ERR_STATE_free(ERR_STATE *s) { Loading Loading @@ -645,6 +656,7 @@ void ERR_put_error(int lib, int func, int reason, const char *file, es->top=(es->top+1)%ERR_NUM_ERRORS; if (es->top == es->bottom) es->bottom=(es->bottom+1)%ERR_NUM_ERRORS; es->err_flags[es->top]=0; es->err_buffer[es->top]=ERR_PACK(lib,func,reason); es->err_file[es->top]=file; es->err_line[es->top]=line; Loading @@ -660,10 +672,7 @@ void ERR_clear_error(void) for (i=0; i<ERR_NUM_ERRORS; i++) { es->err_buffer[i]=0; err_clear_data(es,i); es->err_file[i]=NULL; es->err_line[i]= -1; err_clear(es,i); } es->top=es->bottom=0; } Loading Loading @@ -1034,3 +1043,35 @@ void ERR_add_error_data(int num, ...) err: va_end(args); } int ERR_set_mark(void) { int i=0; ERR_STATE *es; es=ERR_get_state(); if (es->bottom == es->top) return 0; es->err_flags[es->top]|=ERR_FLAG_MARK; return 1; } int ERR_pop_to_mark(void) { int i=0; ERR_STATE *es; es=ERR_get_state(); while(es->bottom != es->top && (es->err_flags[es->top] & ERR_FLAG_MARK) == 0) { err_clear(es,es->top); es->top-=1; if (es->top == -1) es->top=ERR_NUM_ERRORS; } if (es->bottom == es->top) return 0; es->err_flags[es->top]&=~ERR_FLAG_MARK; return 1; } crypto/err/err.h +6 −0 Original line number Diff line number Diff line Loading @@ -88,10 +88,13 @@ extern "C" { #define ERR_TXT_MALLOCED 0x01 #define ERR_TXT_STRING 0x02 #define ERR_FLAG_MARK 0x01 #define ERR_NUM_ERRORS 16 typedef struct err_state_st { unsigned long pid; int err_flags[ERR_NUM_ERRORS]; unsigned long err_buffer[ERR_NUM_ERRORS]; char *err_data[ERR_NUM_ERRORS]; int err_data_flags[ERR_NUM_ERRORS]; Loading Loading @@ -294,6 +297,9 @@ LHASH *ERR_get_err_state_table(void); int ERR_get_next_error_library(void); int ERR_set_mark(void); int ERR_pop_to_mark(void); /* This opaque type encapsulates the low-level error-state functions */ typedef struct st_ERR_FNS ERR_FNS; /* An application can use this function and provide the return value to loaded Loading Loading
CHANGES +5 −1 Original line number Diff line number Diff line Loading @@ -4,6 +4,10 @@ Changes between 0.9.7c and 0.9.8 [xx XXX xxxx] *) Add the functions ERR_set_mark() and ERR_pop_to_mark() for better control of the error stack. [Richard Levitte] *) Add support for STORE in ENGINE. [Richard Levitte] Loading Loading @@ -662,7 +666,7 @@ yet to be integrated into this CVS branch: the config script, much like the NetBSD support. [Richard Levitte & Kris Kennaway <kris@obsecurity.org>] Changes between 0.9.6h and 0.9.7 [31 Dec 2002] Changes between 0.9.6j and 0.9.7 [31 Dec 2002] *) Fix session ID handling in SSLv2 client code: the SERVER FINISHED code (06) was taken as the first octet of the session ID and the last Loading
crypto/err/err.c +46 −5 Original line number Diff line number Diff line Loading @@ -548,13 +548,24 @@ static void build_SYS_str_reasons() #endif #define err_clear_data(p,i) \ do { \ if (((p)->err_data[i] != NULL) && \ (p)->err_data_flags[i] & ERR_TXT_MALLOCED) \ { \ OPENSSL_free((p)->err_data[i]); \ (p)->err_data[i]=NULL; \ } \ (p)->err_data_flags[i]=0; (p)->err_data_flags[i]=0; \ } while(0) #define err_clear(p,i) \ do { \ es->err_flags[i]=0; \ es->err_buffer[i]=0; \ err_clear_data(p,i); \ es->err_file[i]=NULL; \ es->err_line[i]= -1; \ } while(0) static void ERR_STATE_free(ERR_STATE *s) { Loading Loading @@ -645,6 +656,7 @@ void ERR_put_error(int lib, int func, int reason, const char *file, es->top=(es->top+1)%ERR_NUM_ERRORS; if (es->top == es->bottom) es->bottom=(es->bottom+1)%ERR_NUM_ERRORS; es->err_flags[es->top]=0; es->err_buffer[es->top]=ERR_PACK(lib,func,reason); es->err_file[es->top]=file; es->err_line[es->top]=line; Loading @@ -660,10 +672,7 @@ void ERR_clear_error(void) for (i=0; i<ERR_NUM_ERRORS; i++) { es->err_buffer[i]=0; err_clear_data(es,i); es->err_file[i]=NULL; es->err_line[i]= -1; err_clear(es,i); } es->top=es->bottom=0; } Loading Loading @@ -1034,3 +1043,35 @@ void ERR_add_error_data(int num, ...) err: va_end(args); } int ERR_set_mark(void) { int i=0; ERR_STATE *es; es=ERR_get_state(); if (es->bottom == es->top) return 0; es->err_flags[es->top]|=ERR_FLAG_MARK; return 1; } int ERR_pop_to_mark(void) { int i=0; ERR_STATE *es; es=ERR_get_state(); while(es->bottom != es->top && (es->err_flags[es->top] & ERR_FLAG_MARK) == 0) { err_clear(es,es->top); es->top-=1; if (es->top == -1) es->top=ERR_NUM_ERRORS; } if (es->bottom == es->top) return 0; es->err_flags[es->top]&=~ERR_FLAG_MARK; return 1; }
crypto/err/err.h +6 −0 Original line number Diff line number Diff line Loading @@ -88,10 +88,13 @@ extern "C" { #define ERR_TXT_MALLOCED 0x01 #define ERR_TXT_STRING 0x02 #define ERR_FLAG_MARK 0x01 #define ERR_NUM_ERRORS 16 typedef struct err_state_st { unsigned long pid; int err_flags[ERR_NUM_ERRORS]; unsigned long err_buffer[ERR_NUM_ERRORS]; char *err_data[ERR_NUM_ERRORS]; int err_data_flags[ERR_NUM_ERRORS]; Loading Loading @@ -294,6 +297,9 @@ LHASH *ERR_get_err_state_table(void); int ERR_get_next_error_library(void); int ERR_set_mark(void); int ERR_pop_to_mark(void); /* This opaque type encapsulates the low-level error-state functions */ typedef struct st_ERR_FNS ERR_FNS; /* An application can use this function and provide the return value to loaded Loading