ssh-keygen -R is case-sensitive, but should not be
    Ángel González 
    keisial at gmail.com
       
    Sat Apr 16 09:28:00 AEST 2016
    
    
  
On 16/04/16 00:32, Griff Miller II wrote:
> Here is a better patch. Somehow I pasted an older version of my edits:
Hello Griff
Thanks for your patch. That will surely help the maintainers.
Here are a few comments from my part:
> -------------------------------------------------------
> % diff ./match.c /home/millerig/osrc/openssh-7.2p2/match.c
> 121a122
I'd have prefered an unified diff :)
>> 	char *low_string = 0;
I know that the C standard guarantees that it has the exact
same semantic, but please, if you are initializing a pointer, use NULL.
(PS: there's exactly an instance of that in openssh code at 
server_input_hostkeys_prove, that should be changed, too)
There's a memory leak on line 147 when a subpattern is too long.
> 156,159c157,168
> <  		if (match_pattern(string, sub)) {
> <  			if (negated)
> <  				return -1;		/* Negative */
> <  			else
> ---
>> 		if (dolower) {
By performing the lowercase here, you are doing a free() + malloc() + 
tolower() copying of the string per subpattern.
Just move the lowercasing code before the for.
>> 			u_int j;
>> 			if (low_string) free(low_string);
Which then makes this innecessary.
>> 			low_string = malloc(strlen(string) + 1);
Use xmalloc() here
>> 			for (j = 0; j<  strlen(string); ++j) low_string[j] = tolower(string[j]);
I'd recommend breaking this in two lines.
The compiler will probably figure out that strlen() can be called only 
once, instead of creating O(n²) code,
but this is equivalent to «for (j = 0; string[j]; …»
>> 			low_string[j] = 0;
Similar to the above NULL issue: low_string is a char*, so -although 
equivalent- it's generally better to use '\0'.
>> 		}
>> 		if (match_pattern((dolower ? low_string : string), sub)) {
>> 			if (negated) {
>> 				got_positive = -1;		/* Negative */
>> 				break;
>> 			} else
> 165,166c174,175
> <  	* Return success if got a positive match.  If there was a negative
> <  	* match, we have already returned -1 and never get here.
> ---
>> 	* Return success if there was a positive match;
>> 	 * return -1 if there was a negative match.
> 167a177
>> 	if (low_string) free(low_string);
Useless if
Best regards
    
    
More information about the openssh-unix-dev
mailing list