--- parser3/src/classes/math.C 2021/01/13 21:28:15 1.97 +++ parser3/src/classes/math.C 2023/08/15 19:27:48 1.100 @@ -23,7 +23,7 @@ extern "C" char *crypt(const char* , const char* ); #endif -volatile const char * IDENT_MATH_C="$Id: math.C,v 1.97 2021/01/13 21:28:15 moko Exp $"; +volatile const char * IDENT_MATH_C="$Id: math.C,v 1.100 2023/08/15 19:27:48 moko Exp $"; // defines @@ -134,7 +134,7 @@ static void _crypt(Request& r, MethodPar const char* normal_salt; char normalize_buf[MAX_STRING]; if(prefix_size==strlen(maybe_bodyless_salt)) { // bodyless? - strncpy(normalize_buf, maybe_bodyless_salt, MAX_STRING-MAX_SALT-1); + pa_strncpy(normalize_buf, maybe_bodyless_salt, MAX_STRING-MAX_SALT); char *cur=normalize_buf+strlen(normalize_buf); // sould add up MAX_SALT random chars static unsigned char itoa64[] = /* 0 ... 63 => ASCII - 64 */ @@ -343,7 +343,7 @@ String::C getData(Value& vdata, Request& String::Body body=sdata->cstr_to_string_body_untaint(String::L_AS_IS, r.connection(false), &r.charsets); // explode content, honor tainting changes return String::C(body.cstr(), body.length()); } else { - VFile *file=vdata.as_vfile(String::L_AS_IS); + VFile *file=vdata.as_vfile(); return String::C(file->value_ptr(),file->value_size()); } } @@ -500,6 +500,28 @@ static void _uuid(Request& r, MethodPara r.write(*new String(get_uuid_cstr(lower, solid))); } +static void _uuid7(Request& r, MethodParams& params) { + bool lower=false; + bool solid=false; + + if (params.count() == 1) + if (HashStringValue* options = params.as_hash(0)) { + int valid_options = 0; + if (Value* vlower = options->get("lower")) { + lower = r.process(*vlower).as_bool(); + valid_options++; + } + if (Value* vsolid = options->get("solid")) { + solid = r.process(*vsolid).as_bool(); + valid_options++; + } + if (valid_options != options->count()) + throw Exception(PARSER_RUNTIME, 0, CALLED_WITH_INVALID_OPTION); + } + + r.write(*new String(get_uuid7_cstr(lower, solid))); +} + static void _uid64(Request& r, MethodParams& params) { bool lower = false; @@ -754,6 +776,10 @@ MMath::MMath(): Methoded("math") { // ^math:uuid[options hash] add_native_method("uuid", Method::CT_STATIC, _uuid, 0, 1); + // ^math:uuid7[] + // ^math:uuid7[options hash] + add_native_method("uuid7", Method::CT_STATIC, _uuid7, 0, 1); + // ^math:uid64[] // ^math:uid64[options hash] add_native_method("uid64", Method::CT_STATIC, _uid64, 0, 1);