Sfoglia il codice sorgente

HPCC-18830 Fix stack fault when casting utf8 to change locale

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 7 anni fa
parent
commit
3a0ac400db
2 ha cambiato i file con 43 aggiunte e 0 eliminazioni
  1. 1 0
      ecl/hqlcpp/hqlcpp.cpp
  2. 42 0
      ecl/regress/issue18830.ecl

+ 1 - 0
ecl/hqlcpp/hqlcpp.cpp

@@ -6962,6 +6962,7 @@ void HqlCppTranslator::doBuildExprCast(BuildCtx & ctx, ITypeInfo * to, CHqlBound
             return;
         case type_unicode:
         case type_varunicode:
+        case type_utf8:
             if ((from->getTypeCode() == to->getTypeCode()) && (to->getSize() == UNKNOWN_LENGTH))
             {
                 tgt.set(pure);

+ 42 - 0
ecl/regress/issue18830.ecl

@@ -0,0 +1,42 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2017 HPCC Systems®.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+############################################################################## */
+
+namesRecord :=
+            RECORD, locale('us')
+unicode        surname;
+utf8           forename;
+varunicode     address;
+unicode20        surname20;
+varunicode20     address20;
+            END;
+
+namesRecord2 :=
+            RECORD
+unicode         surname;
+utf8            forename;
+varunicode      address;
+unicode20       surname20;
+varunicode20    address20;
+            END;
+
+namesTable := dataset('x',namesRecord,FLAT);
+
+output(project(nofold(namesTable),
+    transform(namesRecord2,
+        SELF:=LEFT;
+    )
+));