You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by do...@apache.org on 2008/02/21 04:06:35 UTC

svn commit: r629680 - /incubator/shindig/trunk/features/core.io/io.js

Author: doll
Date: Wed Feb 20 19:06:33 2008
New Revision: 629680

URL: http://svn.apache.org/viewvc?rev=629680&view=rev
Log:
Fix for io.js : header params are no longer escaped which enables posts to work. Also added hasOwnProperty to caja-proof the code.


Modified:
    incubator/shindig/trunk/features/core.io/io.js

Modified: incubator/shindig/trunk/features/core.io/io.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/io.js?rev=629680&r1=629679&r2=629680&view=diff
==============================================================================
--- incubator/shindig/trunk/features/core.io/io.js (original)
+++ incubator/shindig/trunk/features/core.io/io.js Wed Feb 20 19:06:33 2008
@@ -184,7 +184,7 @@
       var postData = {
         url: url,
         httpMethod : params.METHOD || "GET",
-        headers: gadgets.io.encodeValues(headers),
+        headers: gadgets.io.encodeValues(headers, false),
         postData : params.POST_DATA || "",
         authz : auth || "",
         st : st || ""
@@ -197,22 +197,26 @@
      * (key=value&...)
      *
      * @param {Object} fields The post fields you wish to encode
+     * @param {Boolean} opt_noEscaping An optional parameter specifying whether
+     *     to turn off escaping of the parameters. Defaults to false.
      * @return {String} The processed post data in www-form-urlencoded format.
      *
      * @member gadgets.io
      */
-    encodeValues : function (fields) {
+    encodeValues : function (fields, opt_noEscaping) {
+      var escape = !opt_noEscaping;
+
       var buf = [];
       var first = false;
-      for (var i in fields) {
+      for (var i in fields) if (fields.hasOwnProperty(i)) {
         if (!first) {
           first = true;
         } else {
           buf.push("&");
         }
-        buf.push(encodeURIComponent(i));
+        buf.push(escape ? encodeURIComponent(i) : i);
         buf.push("=");
-        buf.push(encodeURIComponent(fields[i]));
+        buf.push(escape ? encodeURIComponent(fields[i]) : fields[i]);
       }
       return buf.join("");
     },



Re: svn commit: r629680 - /incubator/shindig/trunk/features/core.io/io.js

Posted by Kevin Brown <et...@google.com>.
Sounds like a bug in the proxy to me then -- I'll look into it. It probably
manifests itself in other places as well if it's happening here.

On Thu, Feb 21, 2008 at 9:25 AM, Cassie <do...@apache.org> wrote:

> I was doing a normal POST type request. This added the correct content
> header just a few lines above the code I changed in io.js:
>
> headers[*"Content-Type"*] = *"application/x-www-form-urlencoded"*;
>
>
> This content header was then being escaped, which caused the / char to get
> translated. This caused an exception on the server saying the header
> content
> could not be recognized. I am completely up for a different way to fix it
> if
> you have one though.
>
> Also, if you are concerned about the spec I could change this so there are
> two methods, encodeValues and encodeValuesWithoutEscaping (or something,
> you
> get the idea) that both use a third helper method to eliminate
> duplication.
> I can make that refactoring if the solution that is in the code seems
> valid.
>
>
> Thanks.
>
> - Cassie
>
>
> On Wed, Feb 20, 2008 at 7:17 PM, Kevin Brown <et...@google.com> wrote:
>
> > I'm not sure I follow here -- we already decode headers on the server.
> Not
> > encoding them cause problems (any = or & in headers will break this; &
> is
> > not common in headers, but = is). I'm also not really keen on adding a
> > parameter (even an optional one) to a method that is in the spec. It
> might
> > cause misuse that we'll have to address in the future.
> >
> > What headers were you trying to send that the proxy wasn't passing
> > through?
> > It sounds like there might be a bug in the proxy, not gadgets.io.
> >
> > On Wed, Feb 20, 2008 at 7:06 PM, <do...@apache.org> wrote:
> >
> > > Author: doll
> > > Date: Wed Feb 20 19:06:33 2008
> > > New Revision: 629680
> > >
> > > URL: http://svn.apache.org/viewvc?rev=629680&view=rev
> > > Log:
> > > Fix for io.js : header params are no longer escaped which enables
> posts
> > to
> > > work. Also added hasOwnProperty to caja-proof the code.
> > >
> > >
> > > Modified:
> > >    incubator/shindig/trunk/features/core.io/io.js
> > >
> > > Modified: incubator/shindig/trunk/features/core.io/io.js
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/io.js?rev=629680&r1=629679&r2=629680&view=diff
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/shindig/trunk/features/core.io/io.js (original)
> > > +++ incubator/shindig/trunk/features/core.io/io.js Wed Feb 20 19:06:33
> > > 2008
> > > @@ -184,7 +184,7 @@
> > >       var postData = {
> > >         url: url,
> > >         httpMethod : params.METHOD || "GET",
> > > -        headers: gadgets.io.encodeValues(headers),
> > > +        headers: gadgets.io.encodeValues(headers, false),
> > >         postData : params.POST_DATA || "",
> > >         authz : auth || "",
> > >         st : st || ""
> > > @@ -197,22 +197,26 @@
> > >      * (key=value&amp;...)
> > >      *
> > >      * @param {Object} fields The post fields you wish to encode
> > > +     * @param {Boolean} opt_noEscaping An optional parameter
> specifying
> > > whether
> > > +     *     to turn off escaping of the parameters. Defaults to false.
> > >      * @return {String} The processed post data in www-form-urlencoded
> > > format.
> > >      *
> > >      * @member gadgets.io
> > >      */
> > > -    encodeValues : function (fields) {
> > > +    encodeValues : function (fields, opt_noEscaping) {
> > > +      var escape = !opt_noEscaping;
> > > +
> > >       var buf = [];
> > >       var first = false;
> > > -      for (var i in fields) {
> > > +      for (var i in fields) if (fields.hasOwnProperty(i)) {
> > >         if (!first) {
> > >           first = true;
> > >         } else {
> > >           buf.push("&");
> > >         }
> > > -        buf.push(encodeURIComponent(i));
> > > +        buf.push(escape ? encodeURIComponent(i) : i);
> > >         buf.push("=");
> > > -        buf.push(encodeURIComponent(fields[i]));
> > > +        buf.push(escape ? encodeURIComponent(fields[i]) : fields[i]);
> > >       }
> > >       return buf.join("");
> > >     },
> > >
> > >
> > >
> >
> >
> > --
> > ~Kevin
> >
> > If you received this email by mistake, please delete it, cancel your
> mail
> > account, destroy your hard drive, silence any witnesses, and burn down
> the
> > building that you're in.
> >
>



-- 
~Kevin

If you received this email by mistake, please delete it, cancel your mail
account, destroy your hard drive, silence any witnesses, and burn down the
building that you're in.

Re: svn commit: r629680 - /incubator/shindig/trunk/features/core.io/io.js

Posted by Cassie <do...@apache.org>.
I was doing a normal POST type request. This added the correct content
header just a few lines above the code I changed in io.js:

headers[*"Content-Type"*] = *"application/x-www-form-urlencoded"*;


This content header was then being escaped, which caused the / char to get
translated. This caused an exception on the server saying the header content
could not be recognized. I am completely up for a different way to fix it if
you have one though.

Also, if you are concerned about the spec I could change this so there are
two methods, encodeValues and encodeValuesWithoutEscaping (or something, you
get the idea) that both use a third helper method to eliminate duplication.
I can make that refactoring if the solution that is in the code seems valid.


Thanks.

- Cassie


On Wed, Feb 20, 2008 at 7:17 PM, Kevin Brown <et...@google.com> wrote:

> I'm not sure I follow here -- we already decode headers on the server. Not
> encoding them cause problems (any = or & in headers will break this; & is
> not common in headers, but = is). I'm also not really keen on adding a
> parameter (even an optional one) to a method that is in the spec. It might
> cause misuse that we'll have to address in the future.
>
> What headers were you trying to send that the proxy wasn't passing
> through?
> It sounds like there might be a bug in the proxy, not gadgets.io.
>
> On Wed, Feb 20, 2008 at 7:06 PM, <do...@apache.org> wrote:
>
> > Author: doll
> > Date: Wed Feb 20 19:06:33 2008
> > New Revision: 629680
> >
> > URL: http://svn.apache.org/viewvc?rev=629680&view=rev
> > Log:
> > Fix for io.js : header params are no longer escaped which enables posts
> to
> > work. Also added hasOwnProperty to caja-proof the code.
> >
> >
> > Modified:
> >    incubator/shindig/trunk/features/core.io/io.js
> >
> > Modified: incubator/shindig/trunk/features/core.io/io.js
> > URL:
> >
> http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/io.js?rev=629680&r1=629679&r2=629680&view=diff
> >
> >
> ==============================================================================
> > --- incubator/shindig/trunk/features/core.io/io.js (original)
> > +++ incubator/shindig/trunk/features/core.io/io.js Wed Feb 20 19:06:33
> > 2008
> > @@ -184,7 +184,7 @@
> >       var postData = {
> >         url: url,
> >         httpMethod : params.METHOD || "GET",
> > -        headers: gadgets.io.encodeValues(headers),
> > +        headers: gadgets.io.encodeValues(headers, false),
> >         postData : params.POST_DATA || "",
> >         authz : auth || "",
> >         st : st || ""
> > @@ -197,22 +197,26 @@
> >      * (key=value&amp;...)
> >      *
> >      * @param {Object} fields The post fields you wish to encode
> > +     * @param {Boolean} opt_noEscaping An optional parameter specifying
> > whether
> > +     *     to turn off escaping of the parameters. Defaults to false.
> >      * @return {String} The processed post data in www-form-urlencoded
> > format.
> >      *
> >      * @member gadgets.io
> >      */
> > -    encodeValues : function (fields) {
> > +    encodeValues : function (fields, opt_noEscaping) {
> > +      var escape = !opt_noEscaping;
> > +
> >       var buf = [];
> >       var first = false;
> > -      for (var i in fields) {
> > +      for (var i in fields) if (fields.hasOwnProperty(i)) {
> >         if (!first) {
> >           first = true;
> >         } else {
> >           buf.push("&");
> >         }
> > -        buf.push(encodeURIComponent(i));
> > +        buf.push(escape ? encodeURIComponent(i) : i);
> >         buf.push("=");
> > -        buf.push(encodeURIComponent(fields[i]));
> > +        buf.push(escape ? encodeURIComponent(fields[i]) : fields[i]);
> >       }
> >       return buf.join("");
> >     },
> >
> >
> >
>
>
> --
> ~Kevin
>
> If you received this email by mistake, please delete it, cancel your mail
> account, destroy your hard drive, silence any witnesses, and burn down the
> building that you're in.
>

Re: svn commit: r629680 - /incubator/shindig/trunk/features/core.io/io.js

Posted by Kevin Brown <et...@google.com>.
I'm not sure I follow here -- we already decode headers on the server. Not
encoding them cause problems (any = or & in headers will break this; & is
not common in headers, but = is). I'm also not really keen on adding a
parameter (even an optional one) to a method that is in the spec. It might
cause misuse that we'll have to address in the future.

What headers were you trying to send that the proxy wasn't passing through?
It sounds like there might be a bug in the proxy, not gadgets.io.

On Wed, Feb 20, 2008 at 7:06 PM, <do...@apache.org> wrote:

> Author: doll
> Date: Wed Feb 20 19:06:33 2008
> New Revision: 629680
>
> URL: http://svn.apache.org/viewvc?rev=629680&view=rev
> Log:
> Fix for io.js : header params are no longer escaped which enables posts to
> work. Also added hasOwnProperty to caja-proof the code.
>
>
> Modified:
>    incubator/shindig/trunk/features/core.io/io.js
>
> Modified: incubator/shindig/trunk/features/core.io/io.js
> URL:
> http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/io.js?rev=629680&r1=629679&r2=629680&view=diff
>
> ==============================================================================
> --- incubator/shindig/trunk/features/core.io/io.js (original)
> +++ incubator/shindig/trunk/features/core.io/io.js Wed Feb 20 19:06:33
> 2008
> @@ -184,7 +184,7 @@
>       var postData = {
>         url: url,
>         httpMethod : params.METHOD || "GET",
> -        headers: gadgets.io.encodeValues(headers),
> +        headers: gadgets.io.encodeValues(headers, false),
>         postData : params.POST_DATA || "",
>         authz : auth || "",
>         st : st || ""
> @@ -197,22 +197,26 @@
>      * (key=value&amp;...)
>      *
>      * @param {Object} fields The post fields you wish to encode
> +     * @param {Boolean} opt_noEscaping An optional parameter specifying
> whether
> +     *     to turn off escaping of the parameters. Defaults to false.
>      * @return {String} The processed post data in www-form-urlencoded
> format.
>      *
>      * @member gadgets.io
>      */
> -    encodeValues : function (fields) {
> +    encodeValues : function (fields, opt_noEscaping) {
> +      var escape = !opt_noEscaping;
> +
>       var buf = [];
>       var first = false;
> -      for (var i in fields) {
> +      for (var i in fields) if (fields.hasOwnProperty(i)) {
>         if (!first) {
>           first = true;
>         } else {
>           buf.push("&");
>         }
> -        buf.push(encodeURIComponent(i));
> +        buf.push(escape ? encodeURIComponent(i) : i);
>         buf.push("=");
> -        buf.push(encodeURIComponent(fields[i]));
> +        buf.push(escape ? encodeURIComponent(fields[i]) : fields[i]);
>       }
>       return buf.join("");
>     },
>
>
>


-- 
~Kevin

If you received this email by mistake, please delete it, cancel your mail
account, destroy your hard drive, silence any witnesses, and burn down the
building that you're in.