From a9b28323dd1116aef8c53d8e050380895fa1bb74 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 15 Feb 2014 23:41:58 +0100 Subject: [PATCH] Add LargeFileHelper::__construct() verifying that our assumptions hold. --- lib/private/largefilehelper.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/private/largefilehelper.php b/lib/private/largefilehelper.php index 66626b4a7f..08869d7c82 100644 --- a/lib/private/largefilehelper.php +++ b/lib/private/largefilehelper.php @@ -12,6 +12,31 @@ namespace OC; * Helper class for large files on 32-bit platforms. */ class LargeFileHelper { + /** + * pow(2, 53) as a base-10 string. + * @var string + */ + const POW_2_53 = '9007199254740992'; + + /** + * pow(2, 53) - 1 as a base-10 string. + * @var string + */ + const POW_2_53_MINUS_1 = '9007199254740991'; + + /** + * @brief Constructor. Checks whether our assumptions hold on the platform + * we are on, throws an exception if they do not hold. + */ + public function __construct() { + $pow_2_53 = floatval(self::POW_2_53_MINUS_1) + 1.0; + if ($this->formatUnsignedInteger($pow_2_53) !== self::POW_2_53) { + throw new \RunTimeException( + 'This class assumes floats to be double precision or "better".' + ); + } + } + /** * @brief Formats a signed integer or float as an unsigned integer base-10 * string. Passed strings will be checked for being base-10.