mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Correctly deal with empty XML files
Previously we could end up with a bogus dive with all zero data in it. Adding dives/test24.xml to be able to test that we handle this case correctly. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									0d637c2fa9
								
							
						
					
					
						commit
						421366d0fb
					
				
					 2 changed files with 18 additions and 2 deletions
				
			
		
							
								
								
									
										4
									
								
								dives/test24.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								dives/test24.xml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | |||
| <dives> | ||||
| <program name='subsurface' version='1'></program> | ||||
| </dives> | ||||
| <!-- intentionally empty dive file - should register as no dives --> | ||||
							
								
								
									
										16
									
								
								parse-xml.c
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								parse-xml.c
									
										
									
									
									
								
							|  | @ -1173,11 +1173,23 @@ static void try_to_fill_trip(struct dive **divep, const char *name, char *buf) | |||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * File boundaries are dive boundaries. But sometimes there are | ||||
|  * While in some formats file boundaries are dive boundaries, in many | ||||
|  * others (as for example in our native format) there are | ||||
|  * multiple dives per file, so there can be other events too that | ||||
|  * trigger a "new dive" marker and you may get some nesting due | ||||
|  * to that. Just ignore nesting levels. | ||||
|  * On the flipside it is possible that we start an XML file that ends | ||||
|  * up having no dives in it at all - don't create a bogus empty dive | ||||
|  * for those. It's not entirely clear what is the minimum set of data | ||||
|  * to make a dive valid, but if it has no location, no date and no | ||||
|  * samples I'm pretty sure it's useless. | ||||
|  */ | ||||
| static gboolean is_dive(void) | ||||
| { | ||||
| 	return (cur_dive && | ||||
| 		(cur_dive->location || cur_dive->when || cur_dive->samples)); | ||||
| } | ||||
| 
 | ||||
| static void dive_start(void) | ||||
| { | ||||
| 	if (cur_dive) | ||||
|  | @ -1188,7 +1200,7 @@ static void dive_start(void) | |||
| 
 | ||||
| static void dive_end(void) | ||||
| { | ||||
| 	if (!cur_dive) | ||||
| 	if (!is_dive()) | ||||
| 		return; | ||||
| 	record_dive(cur_dive); | ||||
| 	cur_dive = NULL; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue