--- parser3/src/classes/math.C 2023/08/15 19:27:48 1.100 +++ parser3/src/classes/math.C 2023/11/23 01:27:12 1.104 @@ -1,8 +1,8 @@ /** @file Parser: @b math parser class. - Copyright (c) 2001-2020 Art. Lebedev Studio (http://www.artlebedev.com) - Author: Alexandr Petrosian (http://paf.design.ru) + Copyright (c) 2001-2023 Art. Lebedev Studio (http://www.artlebedev.com) + Authors: Konstantin Morshnev , Alexandr Petrosian portions from gen_uuid.c, Copyright (C) 1996, 1997, 1998, 1999 Theodore Ts'o. @@ -23,7 +23,7 @@ extern "C" char *crypt(const char* , const char* ); #endif -volatile const char * IDENT_MATH_C="$Id: math.C,v 1.100 2023/08/15 19:27:48 moko Exp $"; +volatile const char * IDENT_MATH_C="$Id: math.C,v 1.104 2023/11/23 01:27:12 moko Exp $"; // defines @@ -47,8 +47,8 @@ DECLARE_CLASS_VAR(math, new MMath); static void _random(Request& r, MethodParams& params) { double top=params.as_double(0, "range must be expression", r); - if(top<1 || top>INT32_MAX) - throw Exception(PARSER_RUNTIME, 0, "top(%.15g) must be [1..%u]", top, INT32_MAX); + if(top<1 || top>INT_MAX) + throw Exception(PARSER_RUNTIME, 0, "top(%.15g) must be [1..%u]", top, INT_MAX); r.write(*new VInt(_random(uint(top)))); } @@ -544,7 +544,7 @@ static void _uid64(Request& r, MethodPar static void _crc32(Request& r, MethodParams& params) { const char *string=params.as_string(0, PARAMETER_MUST_BE_STRING).cstr(); - r.write(*new VInt(pa_crc32(string, strlen(string)))); + r.write(*new VDouble((uint)pa_crc32(string, strlen(string)))); } static const char* abc_hex = "0123456789ABCDEF"; @@ -633,7 +633,6 @@ static void _convert(Request& r, MethodP } bool negative=false; - bool sign=false; // converting digits to their numeric values @@ -659,11 +658,13 @@ static void _convert(Request& r, MethodP if(src[0]=='-') { negative=true; - sign=true; src++; + if(!*src || isspace(*src)) + throw Exception("number.format", 0, "'-' is invalid number"); } else if(src[0]=='+') { - sign=true; src++; + if(!*src || isspace(*src)) + throw Exception("number.format", 0, "'+' is invalid number"); } for(c=src;c