]> granicus.if.org Git - rtmpdump/commitdiff
Fix: if playpath begins with '?' just use the remainder
authorhyc <hyc@400ebc74-4327-4243-bc38-086b20814532>
Sat, 24 Apr 2010 07:22:32 +0000 (07:22 +0000)
committerhyc <hyc@400ebc74-4327-4243-bc38-086b20814532>
Sat, 24 Apr 2010 07:22:32 +0000 (07:22 +0000)
git-svn-id: svn://svn.mplayerhq.hu/rtmpdump/trunk@444 400ebc74-4327-4243-bc38-086b20814532

rtmpsrv.c
rtmpsuck.c

index 5f980b61e8d7c455854523ac293be09b8000058d..ed2f4eec2f53980c30a2c37888ed06aa769b909d 100644 (file)
--- a/rtmpsrv.c
+++ b/rtmpsrv.c
@@ -649,7 +649,17 @@ ServeInvoke(STREAMING_SERVER *server, RTMP * r, RTMPPacket *packet, unsigned int
          /* strip trailing URL parameters */
          q = memchr(av.av_val, '?', av.av_len);
          if (q)
-           av.av_len = q - av.av_val;
+           {
+                 if (q == av.av_val)
+                   {
+                         av.av_val++;
+                         av.av_len--;
+                       }
+                 else
+                   {
+                 av.av_len = q - av.av_val;
+                       }
+               }
          /* strip leading slash components */
          for (p=av.av_val+av.av_len-1; p>=av.av_val; p--)
            if (*p == '/')
index dcebac0b9fdb73555cc0cfa91c577f3873434076..c42b31bb53dfe0dd12f4191c56030049de4cd101 100644 (file)
@@ -241,7 +241,10 @@ ServeInvoke(STREAMING_SERVER *server, int which, RTMPPacket *pack, const char *b
                       r1 = pval.av_val+8;
                     }
                   r2 = strchr(r1, '/');
-                  len = r2 - r1;
+                 if (r2)
+                    len = r2 - r1;
+                 else
+                   len = pval.av_len - (r1 - pval.av_val);
                   r2 = malloc(len+1);
                   memcpy(r2, r1, len);
                   r2[len] = '\0';
@@ -327,7 +330,17 @@ ServeInvoke(STREAMING_SERVER *server, int which, RTMPPacket *pack, const char *b
       /* strip trailing URL parameters */
       q = memchr(av.av_val, '?', av.av_len);
       if (q)
-        av.av_len = q - av.av_val;
+        {
+         if (q == av.av_val)
+           {
+             av.av_val++;
+             av.av_len--;
+           }
+         else
+           {
+              av.av_len = q - av.av_val;
+           }
+       }
       /* strip leading slash components */
       for (p=av.av_val+av.av_len-1; p>=av.av_val; p--)
         if (*p == '/')