[pulseaudio-discuss] [PATCH] librtp: Accept both LF and CRLF after SDP header

Peter Meerwald pmeerw at pmeerw.net
Fri Dec 27 00:21:48 PST 2013


Hi,

> RFC 4556 specifies that
> 
> > The sequence CRLF (0x0d0a) is used to end a record, although parsers SHOULD be
> > tolerant and also accept records terminated with a single newline character.
> 
> PulseAudio is only looking for LF characters, which leads to a few
> problems:

ok, this could be improved

> 1. If the version header ends with CRLF, the packet is rejected. This
> has previously been reported in
> http://lists.freedesktop.org/archives/pulseaudio-discuss/2012-July/014159.html

please include a link to that report in the patch description

> 2. The packets generated by module-rtp-send don't follow the RFC.

any further information?

> 3. Any CR characters are included in the values that are read. This can
> be seen when logging to console in the form of messages like
> 
> > )" [pulseaudio] sink-input.c: Freeing input 0 "RTP Stream (foo
> 
> . Note how the embedded carriage return leads to the message start being
> overwritten.
 
ok, not nice

> As for my patch, please disregard it since it's wrong :). I'll come back
> later with a fixed version.

go for it!

you want to accept CR/LF after each line, not just the first one?

> > why is this patch needed?

> > > ---
> > >  src/modules/rtp/sdp.c | 7 ++++++-
> > >  src/modules/rtp/sdp.h | 2 +-
> > >  2 files changed, 7 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/src/modules/rtp/sdp.c b/src/modules/rtp/sdp.c
> > > index e47a41b..904c35f 100644
> > > --- a/src/modules/rtp/sdp.c
> > > +++ b/src/modules/rtp/sdp.c
> > > @@ -66,7 +66,7 @@ char *pa_sdp_build(int af, const void *src, const void *dst, const char *name, u
> > >      pa_assert_se(inet_ntop(af, dst, buf_dst, sizeof(buf_dst)));
> > >  
> > >      return pa_sprintf_malloc(
> > > -            PA_SDP_HEADER
> > > +            PA_SDP_HEADER "\n"
> > >              "o=%s %lu 0 IN %s %s\n"
> > >              "s=%s\n"
> > >              "c=IN %s %s\n"
> > > @@ -136,6 +136,11 @@ pa_sdp_info *pa_sdp_parse(const char *t, pa_sdp_info *i, int is_goodbye) {
> > >  
> > >      t += sizeof(PA_SDP_HEADER)-1;
> > >  
> > > +    if (*t == '\r')
> > > +        t++;
> > > +    if (*t == '\n')
> > > +        t++;
> > > +
> > >      while (*t) {
> > >          size_t l;
> > >  
> > > diff --git a/src/modules/rtp/sdp.h b/src/modules/rtp/sdp.h
> > > index 4cb3b20..e13ca8a 100644
> > > --- a/src/modules/rtp/sdp.h
> > > +++ b/src/modules/rtp/sdp.h
> > > @@ -28,7 +28,7 @@
> > >  
> > >  #include <pulse/sample.h>
> > >  
> > > -#define PA_SDP_HEADER "v=0\n"
> > > +#define PA_SDP_HEADER "v=0"
> > >  
> > >  typedef struct pa_sdp_info {
> > >      char *origin;
> > > 
> > 
> > -- 
> > 
> > Peter Meerwald
> > +43-664-2444418 (mobile)
> 

-- 

Peter Meerwald
+43-664-2444418 (mobile)


More information about the pulseaudio-discuss mailing list