|  | @@ -558,10 +558,17 @@ tor_vasprintf(char **strp, const char *fmt, va_list args)
 | 
	
		
			
				|  |  |    int len, r;
 | 
	
		
			
				|  |  |    va_list tmp_args;
 | 
	
		
			
				|  |  |    va_copy(tmp_args, args);
 | 
	
		
			
				|  |  | -  /* vsnprintf() was properly checked but tor_vsnprintf() available so
 | 
	
		
			
				|  |  | -   * why not use it? */
 | 
	
		
			
				|  |  | -  len = tor_vsnprintf(buf, sizeof(buf), fmt, tmp_args);
 | 
	
		
			
				|  |  | +  /* Use vsnprintf to retrieve needed length.  tor_vsnprintf() is not an option
 | 
	
		
			
				|  |  | +   * here because it will simply return -1 if buf is not large enough to hold the
 | 
	
		
			
				|  |  | +   * complete string.
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  len = vsnprintf(buf, sizeof(buf), fmt, tmp_args);
 | 
	
		
			
				|  |  |    va_end(tmp_args);
 | 
	
		
			
				|  |  | +  buf[sizeof(buf) - 1] = '\0';
 | 
	
		
			
				|  |  | +  if (len < 0) {
 | 
	
		
			
				|  |  | +    *strp = NULL;
 | 
	
		
			
				|  |  | +    return -1;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |    if (len < (int)sizeof(buf)) {
 | 
	
		
			
				|  |  |      *strp = tor_strdup(buf);
 | 
	
		
			
				|  |  |      return len;
 |