mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-01-19 11:06:15 +00:00
Fixing parameters from leaking into the script tag when calling JsHelper::submit(). Added test cases and refactored JsHelper::link(). Fixes #613
This commit is contained in:
parent
c404ae5400
commit
bc6b8e5dfd
2 changed files with 40 additions and 5 deletions
|
@ -319,10 +319,7 @@ class JsHelper extends AppHelper {
|
||||||
$event = $this->event('click', $requestString, $options);
|
$event = $this->event('click', $requestString, $options);
|
||||||
}
|
}
|
||||||
if (isset($options['buffer']) && $options['buffer'] == false) {
|
if (isset($options['buffer']) && $options['buffer'] == false) {
|
||||||
$opts = array();
|
$opts = array_intersect_key(array('safe' => null), $options);
|
||||||
if (isset($options['safe'])) {
|
|
||||||
$opts['safe'] = $options['safe'];
|
|
||||||
}
|
|
||||||
$out .= $this->Html->scriptBlock($event, $opts);
|
$out .= $this->Html->scriptBlock($event, $opts);
|
||||||
}
|
}
|
||||||
return $out;
|
return $out;
|
||||||
|
@ -397,7 +394,8 @@ class JsHelper extends AppHelper {
|
||||||
$event = $this->event('click', $requestString, $options);
|
$event = $this->event('click', $requestString, $options);
|
||||||
}
|
}
|
||||||
if (isset($options['buffer']) && $options['buffer'] == false) {
|
if (isset($options['buffer']) && $options['buffer'] == false) {
|
||||||
$out .= $this->Html->scriptBlock($event, $options);
|
$opts = array_intersect_key(array('safe' => null), $options);
|
||||||
|
$out .= $this->Html->scriptBlock($event, $opts);
|
||||||
}
|
}
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
|
@ -456,6 +456,43 @@ CODE;
|
||||||
$this->assertTags($result, $expected);
|
$this->assertTags($result, $expected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* test that no buffer works with submit() and that parameters are leaking into the script tag.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function testSubmitWithNoBuffer() {
|
||||||
|
$this->_useMock();
|
||||||
|
$options = array('update' => '#content', 'id' => 'test-submit', 'buffer' => false, 'safe' => false);
|
||||||
|
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'serialize-code', array('serializeform', '*'));
|
||||||
|
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'serialize-code', array('serializeForm', '*'));
|
||||||
|
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'ajax-code', array('request', '*'));
|
||||||
|
$this->Js->TestJsEngine->setReturnValue('dispatchMethod', 'event-handler', array('event', '*'));
|
||||||
|
|
||||||
|
$this->Js->TestJsEngine->expectAt(0, 'dispatchMethod', array('get', '*'));
|
||||||
|
$this->Js->TestJsEngine->expectAt(1, 'dispatchMethod', array(new PatternExpectation('/serializeForm/i'), '*'));
|
||||||
|
$this->Js->TestJsEngine->expectAt(2, 'dispatchMethod', array('request', '*'));
|
||||||
|
|
||||||
|
$params = array(
|
||||||
|
'update' => $options['update'], 'buffer' => false, 'safe' => false, 'data' => 'serialize-code',
|
||||||
|
'method' => 'post', 'dataExpression' => true
|
||||||
|
);
|
||||||
|
$this->Js->TestJsEngine->expectAt(3, 'dispatchMethod', array(
|
||||||
|
'event', array('click', "ajax-code", $params)
|
||||||
|
));
|
||||||
|
|
||||||
|
$result = $this->Js->submit('Save', $options);
|
||||||
|
$expected = array(
|
||||||
|
'div' => array('class' => 'submit'),
|
||||||
|
'input' => array('type' => 'submit', 'id' => $options['id'], 'value' => 'Save'),
|
||||||
|
'/div',
|
||||||
|
'script' => array('type' => 'text/javascript'),
|
||||||
|
'event-handler',
|
||||||
|
'/script'
|
||||||
|
);
|
||||||
|
$this->assertTags($result, $expected);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test that Object::Object() is not breaking json output in JsHelper
|
* Test that Object::Object() is not breaking json output in JsHelper
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue