mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:12:45 +00:00 
			
		
		
		
	LibC+Userland: Prefer snprintf over sprintf
I ignored the sprintf in Userland/cal.cpp because it's too much trouble. However, this only underlines the need for bounds checking.
This commit is contained in:
		
							parent
							
								
									1aad0f8b16
								
							
						
					
					
						commit
						4f77ccbda8
					
				
					 2 changed files with 7 additions and 3 deletions
				
			
		|  | @ -100,7 +100,9 @@ hostent* gethostbyname(const char* name) | |||
| { | ||||
|     auto ipv4_address = IPv4Address::from_string(name); | ||||
|     if (ipv4_address.has_value()) { | ||||
|         sprintf(__gethostbyname_name_buffer, "%s", ipv4_address.value().to_string().characters()); | ||||
|         auto ip4_string = ipv4_address.value().to_string(); | ||||
|         ASSERT(ip4_string.length() < sizeof(__gethostbyname_name_buffer)); | ||||
|         strncpy(__gethostbyname_name_buffer, ip4_string.characters(), ip4_string.length()); | ||||
|         __gethostbyname_buffer.h_name = __gethostbyname_name_buffer; | ||||
|         __gethostbyname_buffer.h_aliases = nullptr; | ||||
|         __gethostbyname_buffer.h_addrtype = AF_INET; | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ static double get_double(const char* name, const char* d_string, int* number_of_ | |||
|     char* end; | ||||
|     double d = strtod(d_string, &end); | ||||
|     if (d == 0 && end == d_string) { | ||||
|         fprintf(stderr, "%s: invalid double vallue \"%s\"\n", name, d_string); | ||||
|         fprintf(stderr, "%s: invalid double value \"%s\"\n", name, d_string); | ||||
|         exit(1); | ||||
|     } | ||||
|     if (char* dot = strchr(d_string, '.')) | ||||
|  | @ -95,7 +95,7 @@ int main(int argc, const char* argv[]) | |||
|     double d = start; | ||||
|     for (int i = 0; i <= n; ++i) { | ||||
|         char buf[40]; | ||||
|         sprintf(buf, "%f", d); // FIXME: Serenity's printf() doesn't seem to handle %f correctly: For `seq 1 0.1 2` this always prints "1.0" as `d` goes from 1.0 to 2.0.
 | ||||
|         snprintf(buf, sizeof(buf), "%f", d); | ||||
|         if (char* dot = strchr(buf, '.')) { | ||||
|             if (number_of_decimals == 0) | ||||
|                 *dot = '\0'; | ||||
|  | @ -105,4 +105,6 @@ int main(int argc, const char* argv[]) | |||
|         printf("%s\n", buf); | ||||
|         d += step; | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Ben Wiederhake
						Ben Wiederhake