mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 21:02:44 +00:00 
			
		
		
		
	 d7734bf232
			
		
	
	
		d7734bf232
		
	
	
	
	
		
			
			When there's a trailing space in the cmdline from the boot loader, this results in an empty string being emitted from `String::split` after splitting apart the argument list. This empty string resulted in a zero-length Vector from the subsequent call to split the key=value pairs, which was unexpected. This ultimately caused a crash when we tried to access `[0]` of that zero-length vector. We now detect and handle an empty string coming from `String::split` correctly.
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			648 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			648 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <Kernel/KParams.h>
 | |
| 
 | |
| static KParams* s_the;
 | |
| 
 | |
| KParams& KParams::the()
 | |
| {
 | |
|     return *s_the;
 | |
| }
 | |
| 
 | |
| KParams::KParams(const String& cmdline)
 | |
|     : m_cmdline(cmdline)
 | |
| {
 | |
|     s_the = this;
 | |
| 
 | |
|     for (auto str : m_cmdline.split(' ')) {
 | |
|         if (str == "") {
 | |
|             continue;
 | |
|         }
 | |
| 
 | |
|         auto pair = str.split_limit('=', 2);
 | |
| 
 | |
|         if (pair.size() == 1) {
 | |
|             m_params.set(pair[0], "");
 | |
|         } else {
 | |
|             m_params.set(pair[0], pair[1]);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| String KParams::get(const String& key) const
 | |
| {
 | |
|     return m_params.get(key);
 | |
| }
 | |
| 
 | |
| bool KParams::has(const String& key) const
 | |
| {
 | |
|     return m_params.contains(key);
 | |
| }
 |