mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Uemis downloader: don't use bogus sensor data from Uemis
Sometimes we get a sensor number of 255 - which gets turned into a tank index and then causes all kinds of havoc. Simply refuse to use a tank number larger than the maximum Subsurface has been compiled for. Oh, and use consistent variables to handle these unsigned 8 bit integers. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									f33a11bc8a
								
							
						
					
					
						commit
						31b8dffbb1
					
				
					 1 changed files with 7 additions and 4 deletions
				
			
		
							
								
								
									
										7
									
								
								uemis.c
									
										
									
									
									
								
							
							
						
						
									
										7
									
								
								uemis.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -285,7 +285,7 @@ void uemis_parse_divelog_binary(char *base64, void *datap)
 | 
			
		|||
	struct dive *dive = datap;
 | 
			
		||||
	struct divecomputer *dc = &dive->dc;
 | 
			
		||||
	int template, gasoffset;
 | 
			
		||||
	int active = 0;
 | 
			
		||||
	uint8_t active = 0;
 | 
			
		||||
	char version[5];
 | 
			
		||||
 | 
			
		||||
	datalen = uemis_convert_base64(base64, &data);
 | 
			
		||||
| 
						 | 
				
			
			@ -334,11 +334,14 @@ void uemis_parse_divelog_binary(char *base64, void *datap)
 | 
			
		|||
	i = 0x123;
 | 
			
		||||
	u_sample = (uemis_sample_t *)(data + i);
 | 
			
		||||
	while ((i <= datalen) && (data[i] != 0 || data[i+1] != 0)) {
 | 
			
		||||
		/* it seems that a dive_time of 0 indicates the end of the valid readings */
 | 
			
		||||
		if (u_sample->active_tank != active) {
 | 
			
		||||
			if (u_sample->active_tank >= MAX_CYLINDERS) {
 | 
			
		||||
				fprintf(stderr, "got invalid sensor #%d was #%d\n", u_sample->active_tank, active);
 | 
			
		||||
			} else {
 | 
			
		||||
				active = u_sample->active_tank;
 | 
			
		||||
				add_gas_switch_event(dive, dc, u_sample->dive_time, active);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		sample = prepare_sample(dc);
 | 
			
		||||
		sample->time.seconds = u_sample->dive_time;
 | 
			
		||||
		sample->depth.mm = rel_mbar_to_depth(u_sample->water_pressure, dive);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue