| 
														
															@@ -4928,7 +4928,7 @@ rend_parse_introduction_points(rend_service_descriptor_t *parsed, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                                size_t intro_points_encoded_size) 
														 | 
														
														 | 
														
															                                size_t intro_points_encoded_size) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 { 
														 | 
														
														 | 
														
															 { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   const char *current_ipo, *end_of_intro_points; 
														 | 
														
														 | 
														
															   const char *current_ipo, *end_of_intro_points; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  smartlist_t *tokens; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  smartlist_t *tokens = NULL; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   directory_token_t *tok; 
														 | 
														
														 | 
														
															   directory_token_t *tok; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   rend_intro_point_t *intro; 
														 | 
														
														 | 
														
															   rend_intro_point_t *intro; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   extend_info_t *info; 
														 | 
														
														 | 
														
															   extend_info_t *info; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -4937,8 +4937,10 @@ rend_parse_introduction_points(rend_service_descriptor_t *parsed, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   tor_assert(parsed); 
														 | 
														
														 | 
														
															   tor_assert(parsed); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   /** Function may only be invoked once. */ 
														 | 
														
														 | 
														
															   /** Function may only be invoked once. */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   tor_assert(!parsed->intro_nodes); 
														 | 
														
														 | 
														
															   tor_assert(!parsed->intro_nodes); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  tor_assert(intro_points_encoded); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  tor_assert(intro_points_encoded_size > 0); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  if (!intro_points_encoded || intro_points_encoded_size == 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    log_warn(LD_REND, "Empty or zero size introduction point list"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    goto err; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   /* Consider one intro point after the other. */ 
														 | 
														
														 | 
														
															   /* Consider one intro point after the other. */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   current_ipo = intro_points_encoded; 
														 | 
														
														 | 
														
															   current_ipo = intro_points_encoded; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   end_of_intro_points = intro_points_encoded + intro_points_encoded_size; 
														 | 
														
														 | 
														
															   end_of_intro_points = intro_points_encoded + intro_points_encoded_size; 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -5042,8 +5044,10 @@ rend_parse_introduction_points(rend_service_descriptor_t *parsed, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  done: 
														 | 
														
														 | 
														
															  done: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   /* Free tokens and clear token list. */ 
														 | 
														
														 | 
														
															   /* Free tokens and clear token list. */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t)); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-  smartlist_free(tokens); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  if (tokens) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t)); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    smartlist_free(tokens); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+  } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															   if (area) 
														 | 
														
														 | 
														
															   if (area) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     memarea_drop_all(area); 
														 | 
														
														 | 
														
															     memarea_drop_all(area); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 |