addressing issues with failed attachement uploads due to webserver configuration, resolves #15

This commit is contained in:
El RIDO 2016-07-19 15:26:41 +02:00
parent 9e7266d561
commit 9a9362789b
2 changed files with 34 additions and 0 deletions

View file

@ -237,6 +237,12 @@ class privatebin
) )
); );
// Ensure attachment did not get lost due to webserver limits or Suhosin
if (strlen($attachmentname) > 0 && strlen($attachment) == 0)
{
return $this->_return_message(1, 'Attachment missing in data received by server. Please check your webserver or suhosin configuration for maximum POST parameter limitations.');
}
// The user posts a comment. // The user posts a comment.
$pasteid = $this->_request->getParam('pasteid'); $pasteid = $this->_request->getParam('pasteid');
$parentid = $this->_request->getParam('parentid'); $parentid = $this->_request->getParam('parentid');

View file

@ -455,6 +455,34 @@ class privatebinTest extends PHPUnit_Framework_TestCase
); );
} }
/**
* In some webserver setups (found with Suhosin) overly long POST params are
* silently removed, check that this case is handled
*
* @runInSeparateProcess
*/
public function testCreateBrokenAttachmentUpload()
{
$this->reset();
$options = parse_ini_file(CONF, true);
$options['traffic']['limit'] = 0;
$options['main']['fileupload'] = true;
helper::confBackup();
helper::createIniFile(CONF, $options);
$_POST = helper::getPasteWithAttachment();
unset($_POST['attachment']);
$_SERVER['HTTP_X_REQUESTED_WITH'] = 'JSONHttpRequest';
$_SERVER['REQUEST_METHOD'] = 'POST';
$_SERVER['REMOTE_ADDR'] = '::1';
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste does not exists before posting data');
ob_start();
new privatebin;
$content = ob_get_contents();
$response = json_decode($content, true);
$this->assertEquals(1, $response['status'], 'outputs error status');
$this->assertFalse($this->_model->exists(helper::getPasteId()), 'paste exists after posting data');
}
/** /**
* @runInSeparateProcess * @runInSeparateProcess
*/ */