From 61d2aa6f2d09d6dd507529a09d3a088bc3fe5dfa Mon Sep 17 00:00:00 2001 From: Dimitry Sibiryakov Date: Wed, 14 May 2025 17:41:19 +0200 Subject: [PATCH 1/2] A quick fix for #8565 --- src/dsql/ExprNodes.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/dsql/ExprNodes.cpp b/src/dsql/ExprNodes.cpp index 31973dfcd4e..a7d687f151e 100644 --- a/src/dsql/ExprNodes.cpp +++ b/src/dsql/ExprNodes.cpp @@ -9945,8 +9945,8 @@ dsc* ParameterNode::execute(thread_db* tdbb, Request* request) const if (impureForOuter) EVL_make_value(tdbb, retDesc, impureForOuter); - if (retDesc->dsc_dtype == dtype_text) - INTL_adjust_text_descriptor(tdbb, retDesc); + //if (retDesc->dsc_dtype == dtype_text) Do not mess with user-provided descriptor, most likely it has dsc_length set to actual data length + // INTL_adjust_text_descriptor(tdbb, retDesc); } auto impureFlags = paramRequest->getImpure( @@ -9984,7 +9984,8 @@ dsc* ParameterNode::execute(thread_db* tdbb, Request* request) const auto charSet = INTL_charset_lookup(tdbb, DSC_GET_CHARSET(retDesc)); EngineCallbacks::instance->validateData(charSet, len, p); - EngineCallbacks::instance->validateLength(charSet, DSC_GET_CHARSET(retDesc), len, p, maxLen); + // Validation of user-provided data against user-provided metadata makes a little sense. Leave it to the real assignment. + //EngineCallbacks::instance->validateLength(charSet, DSC_GET_CHARSET(retDesc), len, p, maxLen); } else if (retDesc->isBlob()) { From da149cdec9e835d73345eb9457dfb3691852f0da Mon Sep 17 00:00:00 2001 From: Dimitry Sibiryakov Date: Fri, 16 May 2025 14:20:40 +0200 Subject: [PATCH 2/2] Cleanup --- src/dsql/ExprNodes.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/dsql/ExprNodes.cpp b/src/dsql/ExprNodes.cpp index a7d687f151e..a23fd081f7d 100644 --- a/src/dsql/ExprNodes.cpp +++ b/src/dsql/ExprNodes.cpp @@ -9944,9 +9944,6 @@ dsc* ParameterNode::execute(thread_db* tdbb, Request* request) const { if (impureForOuter) EVL_make_value(tdbb, retDesc, impureForOuter); - - //if (retDesc->dsc_dtype == dtype_text) Do not mess with user-provided descriptor, most likely it has dsc_length set to actual data length - // INTL_adjust_text_descriptor(tdbb, retDesc); } auto impureFlags = paramRequest->getImpure( @@ -9984,8 +9981,7 @@ dsc* ParameterNode::execute(thread_db* tdbb, Request* request) const auto charSet = INTL_charset_lookup(tdbb, DSC_GET_CHARSET(retDesc)); EngineCallbacks::instance->validateData(charSet, len, p); - // Validation of user-provided data against user-provided metadata makes a little sense. Leave it to the real assignment. - //EngineCallbacks::instance->validateLength(charSet, DSC_GET_CHARSET(retDesc), len, p, maxLen); + // Validation of length for user-provided data against user-provided metadata makes a little sense here. Leave it to the real assignment. } else if (retDesc->isBlob()) {