mirror of
				https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
				synced 2025-11-03 09:01:50 -05:00 
			
		
		
		
	rtp: fix non null terminated string / non portable sscanf
In rtp.c: if (sscanf(t+9, "%i %64c", &_payload, c) == 2) the string c seems to be non-null terminated. It is later used as following: c[strcspn(c, "\n")] = 0; The same piece of code is responsible for the inability of pulseaudio on OpenWRT to handle RTP stream at the rate 48000 from another machine: [pulseaudio] sdp.c: Failed to parse SDP data: missing data. It turns out that uClibc does not agree with glibc about "%64c", see http://git.uclibc.org/uClibc/tree/docs/Glibc_vs_uClibc_Differences.txt BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=92568
This commit is contained in:
		
							parent
							
								
									8fe9847706
								
							
						
					
					
						commit
						9d2b763e29
					
				
					 1 changed files with 4 additions and 3 deletions
				
			
		| 
						 | 
					@ -213,15 +213,16 @@ pa_sdp_info *pa_sdp_parse(const char *t, pa_sdp_info *i, int is_goodbye) {
 | 
				
			||||||
            if (i->payload <= 127) {
 | 
					            if (i->payload <= 127) {
 | 
				
			||||||
                char c[64];
 | 
					                char c[64];
 | 
				
			||||||
                int _payload;
 | 
					                int _payload;
 | 
				
			||||||
 | 
					                int len;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (sscanf(t+9, "%i %64c", &_payload, c) == 2) {
 | 
					                if (sscanf(t + 9, "%i %n", &_payload, &len) == 1) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (_payload < 0 || _payload > 127) {
 | 
					                    if (_payload < 0 || _payload > 127) {
 | 
				
			||||||
                        pa_log("Failed to parse SDP data: invalid payload %i.", _payload);
 | 
					                        pa_log("Failed to parse SDP data: invalid payload %i.", _payload);
 | 
				
			||||||
                        goto fail;
 | 
					                        goto fail;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (_payload == i->payload) {
 | 
					                    if (_payload == i->payload) {
 | 
				
			||||||
 | 
					                        strncpy(c, t + 9 + len, 63);
 | 
				
			||||||
 | 
					                        c[63] = 0;
 | 
				
			||||||
                        c[strcspn(c, "\n")] = 0;
 | 
					                        c[strcspn(c, "\n")] = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        if (parse_sdp_sample_spec(&i->sample_spec, c))
 | 
					                        if (parse_sdp_sample_spec(&i->sample_spec, c))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue