lightspeedretail / webstore

Web Store eCommerce solution for Lightspeed
http://www.lightspeedpos.com/webstore
Open Software License 3.0
85 stars 63 forks source link

BaseCheckoutForm->getSavedCartScenarios does not properly escape quotes #563

Closed mjvotaw closed 11 years ago

mjvotaw commented 11 years ago

In the checkout form, if cached shipping information is found, cached versions of _cartitems.php are placed into javascript via _cartjs.php. If a single quote ( ' ) is present in the output (in the example below, note the apostrophe in "Nixon Men's Outsider Red Watch"), the resulting javascript may be invalid:

 var savedCartScenarios = {30:'<div class="row-fluid"></div><div id="genericcart">    <div class="row-fluid white MyriadProCond">        <div class="span8"><span class="cart_header">Item</span></div>        <div class="span1 text-center "><span class="cart_header">Quantity</span></div>        <div class="span3 text-center"><span class="cart_header">Subotal</span></div></div><div class="row-fluid restockItem MyriadProCond cartDivider darkGreyBg">    <div class="span8"><div class="cartImage pull-left span3"><a href="/shop/a-hat/dp/2"><img src="/shop/images/product/a/a-hat-76px-107px.png"  /></a></div><div class="span9 restockDescription"><div class="lightGrey">Brixton</div><h2>A HAT</h2></div>    </div>    <div class="span1 itemQuantity centeritem"><span class="cart_qty">    <span class="cart_qty white">     1    </span>    </div>    <div class="span2 cart_price pull-right">    <h2 class="pull-left">$39.99</h2>    <div class="removeItem pull-right"></div>    </div></div><div class="row-fluid restockItem MyriadProCond cartDivider darkGreyBg">    <div class="span8"><div class="cartImage pull-left span3"><a href="/shop/nixon-mens-outsider-red-watch/dp/14"><img src="/shop/images/product/n/nixon-mens-outsider-red-watch-76px-107px.png"  /></a></div><div class="span9 restockDescription"><div class="lightGrey">Nixon</div><h2>Nixon Men's Outsider Red Watch</h2></div>    </div>    <div class="span1 itemQuantity centeritem"><span class="cart_qty">    <span class="cart_qty white">     1    </span>    </div>    <div class="span2 cart_price pull-right">    <h2 class="pull-left">$149.99</h2>    <div class="removeItem pull-right"></div>    </div></div><div class="row-fluid"><div class="span3 pull-right MyriadProCond"><div id="cartTaxes" class="row-fluid">            <div class="span6"><span class="cart_label">Sales Tax</span></div>        <div class="span6 white MyriadProBoldCond">$13.30</div>    </div><div class="row-fluid"><div class="span6 "><span class="cart_label">Shipping</span></div><div class="span6 white MyriadProBoldCond "><span id="cartShipping">$0.00</span></div></div><div class="row-fluid">        <span class="span6  uppercase white">Total</span>        <h2 class="span6" id="cartTotal">$203.28</h2></div></div></div></div>',31:'<div class="row-fluid"></div><div id="genericcart">    <div class="row-fluid white MyriadProCond">        <div class="span8"><span class="cart_header">Item</span></div>        <div class="span1 text-center "><span class="cart_header">Quantity</span></div>        <div class="span3 text-center"><span class="cart_header">Subotal</span></div></div><div class="row-fluid restockItem MyriadProCond cartDivider darkGreyBg">    <div class="span8"><div class="cartImage pull-left span3"><a href="/shop/a-hat/dp/2"><img src="/shop/images/product/a/a-hat-76px-107px.png"  /></a></div><div class="span9 restockDescription"><div class="lightGrey">Brixton</div><h2>A HAT</h2></div>    </div>    <div class="span1 itemQuantity centeritem"><span class="cart_qty">    <span class="cart_qty white">     1    </span>    </div>    <div class="span2 cart_price pull-right">    <h2 class="pull-left">$39.99</h2>    <div class="removeItem pull-right"></div>    </div></div><div class="row-fluid restockItem MyriadProCond cartDivider darkGreyBg">    <div class="span8"><div class="cartImage pull-left span3"><a href="/shop/nixon-mens-outsider-red-watch/dp/14"><img src="/shop/images/product/n/nixon-mens-outsider-red-watch-76px-107px.png"  /></a></div><div class="span9 restockDescription"><div class="lightGrey">Nixon</div><h2>Nixon Men's Outsider Red Watch</h2></div>    </div>    <div class="span1 itemQuantity centeritem"><span class="cart_qty">    <span class="cart_qty white">     1    </span>    </div>    <div class="span2 cart_price pull-right">    <h2 class="pull-left">$149.99</h2>    <div class="removeItem pull-right"></div>    </div></div><div class="row-fluid"><div class="span3 pull-right MyriadProCond"><div id="cartTaxes" class="row-fluid">            <div class="span6"><span class="cart_label">Sales Tax</span></div>        <div class="span6 white MyriadProBoldCond">$13.30</div>    </div><div class="row-fluid"><div class="span6 "><span class="cart_label">Shipping</span></div><div class="span6 white MyriadProBoldCond "><span id="cartShipping">$0.00</span></div></div><div class="row-fluid">        <span class="span6  uppercase white">Total</span>        <h2 class="span6" id="cartTotal">$203.28</h2></div></div></div></div>'};

This causes all of the javascipt below this line to not execute properly.

A simple fix would be to add addslashes($value) to BaseCheckoutForm.php, line 675, and anywhere else that would be pushing html data into a json object.

ktwbc commented 11 years ago

Hi, this error has been logged and on the fix list for 3.0.6.