@@ -134,7 +134,7 @@ static inline int addr_prefix_match_size(
134134 for (; ret < min_len ; ++ ret ) {
135135 int byte_number = ret / 8 ;
136136 int bit_number = ret % 8 ;
137- if ((a [byte_number ] & (1U << bit_number )) != (b [byte_number ] & (1U << bit_number )))
137+ if ((a [byte_number ] & (0x80U >> bit_number )) != (b [byte_number ] & (0x80U >> bit_number )))
138138 break ;
139139 }
140140
@@ -1959,6 +1959,8 @@ static wolfsentry_errcode_t wolfsentry_route_lookup_1(
19591959 const size_t addr_buf_size = WOLFSENTRY_BITS_TO_BYTES (remote -> addr_len ) + WOLFSENTRY_BITS_TO_BYTES (local -> addr_len );
19601960 struct wolfsentry_route * target ;
19611961
1962+ if (addr_buf_size > (size_t )WOLFSENTRY_MAX_ADDR_BYTES * 2 )
1963+ WOLFSENTRY_ERROR_RETURN (NUMERIC_ARG_TOO_BIG );
19621964 target = (struct wolfsentry_route * )alloca (sizeof (* target ) + addr_buf_size );
19631965 #define LOOKUP_TARGET target
19641966#endif
@@ -2780,7 +2782,10 @@ static wolfsentry_errcode_t wolfsentry_route_event_dispatch_1(
27802782 if ((rule_route -> parent_event == NULL ) && (route_table -> default_event != NULL )) {
27812783 rule_route -> parent_event = route_table -> default_event ;
27822784 WOLFSENTRY_REFCOUNT_INCREMENT (rule_route -> parent_event -> header .refcount , ret );
2783- WOLFSENTRY_UNLOCK_AND_RERETURN_IF_ERROR (ret );
2785+ if (ret < 0 ) {
2786+ rule_route -> parent_event = NULL ;
2787+ goto just_free_resources ;
2788+ }
27842789 }
27852790 }
27862791
@@ -4027,24 +4032,26 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_route_flag_assoc_by_name(const ch
40274032
40284033static wolfsentry_errcode_t ws_itoa (int i , unsigned char * * out , size_t * spc ) {
40294034 int out_chars ;
4030- int digit_thresh ;
4035+ unsigned int u ;
4036+ unsigned int digit_thresh ;
40314037 int neg ;
40324038 if (i < 0 ) {
40334039 neg = 1 ;
4034- i = - i ;
4040+ u = - ( unsigned int ) i ;
40354041 out_chars = 2 ;
40364042 } else {
40374043 neg = 0 ;
4044+ u = (unsigned int )i ;
40384045 out_chars = 1 ;
40394046 }
40404047 for (digit_thresh = 10 ; ; digit_thresh *= 10 ) {
4041- if (i >= digit_thresh )
4048+ if (u >= digit_thresh )
40424049 ++ out_chars ;
40434050 else {
40444051 digit_thresh /= 10 ;
40454052 break ;
40464053 }
4047- if (digit_thresh == 1000000000 )
4054+ if (digit_thresh == 1000000000U )
40484055 break ;
40494056 }
40504057 if (* spc < (size_t )out_chars )
@@ -4053,8 +4060,8 @@ static wolfsentry_errcode_t ws_itoa(int i, unsigned char **out, size_t *spc) {
40534060 if (neg )
40544061 * (* out )++ = '-' ;
40554062 while (digit_thresh >= 1 ) {
4056- int quotient = i / digit_thresh ;
4057- i %= digit_thresh ;
4063+ unsigned int quotient = u / digit_thresh ;
4064+ u %= digit_thresh ;
40584065 digit_thresh /= 10 ;
40594066 * (* out )++ = (unsigned char )('0' + quotient );
40604067 }
@@ -4640,7 +4647,7 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_route_render(WOLFSENTRY_CONTEXT_A
46404647 }
46414648 }
46424649
4643- wolfsentry_route_render_proto (r -> sa_proto , r -> flags , f );
4650+ WOLFSENTRY_RERETURN_IF_ERROR ( wolfsentry_route_render_proto (r -> sa_proto , r -> flags , f ) );
46444651
46454652 if (r -> parent_event != NULL ) {
46464653 if (fprintf (f , ", ev = \"%.*s\"%s" , (int )r -> parent_event -> label_len , r -> parent_event -> label , WOLFSENTRY_CHECK_BITS (r -> flags , WOLFSENTRY_ROUTE_FLAG_PARENT_EVENT_WILDCARD ) ? "[*]" : "" ) < 0 )
@@ -4730,11 +4737,14 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_route_exports_render(WOLFSENTRY_C
47304737 ret = wolfsentry_addr_family_ntop (WOLFSENTRY_CONTEXT_ARGS_OUT , r -> sa_family , & addr_family , & family_name );
47314738 if (WOLFSENTRY_ERROR_CODE_IS (ret , OK )) {
47324739 if (fprintf (f , ", AF = %s" , family_name ) < 0 )
4733- WOLFSENTRY_ERROR_RETURN (IO_FAILED );
4740+ ret = WOLFSENTRY_ERROR_ENCODE (IO_FAILED );
47344741 if (addr_family ) {
4735- if ((ret = wolfsentry_addr_family_drop_reference (WOLFSENTRY_CONTEXT_ARGS_OUT , addr_family , NULL /* action_results */ )) < 0 )
4736- WOLFSENTRY_ERROR_RERETURN (ret );
4742+ wolfsentry_errcode_t drop_ret = wolfsentry_addr_family_drop_reference (WOLFSENTRY_CONTEXT_ARGS_OUT , addr_family , NULL /* action_results */ );
4743+ if (drop_ret < 0 )
4744+ WOLFSENTRY_ERROR_RERETURN (drop_ret );
47374745 }
4746+ if (ret < 0 )
4747+ WOLFSENTRY_ERROR_RERETURN (ret );
47384748 } else
47394749#endif
47404750 {
@@ -4743,7 +4753,7 @@ WOLFSENTRY_API wolfsentry_errcode_t wolfsentry_route_exports_render(WOLFSENTRY_C
47434753 }
47444754 }
47454755
4746- wolfsentry_route_render_proto (r -> sa_proto , r -> flags , f );
4756+ WOLFSENTRY_RERETURN_IF_ERROR ( wolfsentry_route_render_proto (r -> sa_proto , r -> flags , f ) );
47474757
47484758 if (r -> parent_event_label_len > 0 ) {
47494759 if (fprintf (f , ", ev = \"%.*s\"%s" , (int )r -> parent_event_label_len , r -> parent_event_label , WOLFSENTRY_CHECK_BITS (r -> flags , WOLFSENTRY_ROUTE_FLAG_PARENT_EVENT_WILDCARD ) ? "[*]" : "" ) < 0 )
0 commit comments